2009-05-07 4 views
1

Je dois écrire un petit extrait de code où j'ai besoin de vérifier le contenu d'une carte (valeur clé) si elle existe dans une autre carte, l'enlever de la carteVérification du contenu d'une carte dans une autre carte dans java

Par exemple,

carte1:

1=>obj1 
2=>obj21 
3=>obj3 
4=>obj4 

Autre carte carte2:

10=>obj10 
20=>obj20 
2=>obj2 
30=>obj30 
3=>obj3 

Le résultat de plaisir (carte1, carte2) après l'exécute a le ouput suivant

carte2:

10=>obj10 
2=>obj2 
20=>obj20 
30=>obj30 

est itérer sur la carte et vérifier le contenu plus petit (clé, valeur) est itérez la carte plus petite et en vérifiant la clé et le contenu de la carte plus grande, la manière la plus efficace de s'y prendre.

+0

question étrange :) ce qui se passe si les deux cartes ont la même longueur ??? – pgras

+0

Soit je ne comprends pas vraiment votre question, soit votre exemple a une erreur. Voulez-vous supprimer une entrée de carte pour map2 si sa clé existe en tant que clé dans map1? – Sietse

+0

Le résultat, comme je l'ai compris, est une nouvelle carte avec tous les objets de Map2 qui ne sont pas dans Map1 – tuergeist

Répondre

0

Voir java.util.Collection

boolean removeAll(Collection<?> c) 
+0

Map! = Collection – tuergeist

+0

Carte a keySet() méthode qui renvoie un ensemble. Définir étend Collection. – diciu

+0

entrySet() plutôt que keySet(). Il veut trouver et supprimer par des correspondances complètes, pas seulement par des clés. –

2
m1.entrySet().removeAll(m2.entrySet()); 

où m1 est la carte à modifier, et m2 est la carte avec les applications qui doivent être retirés de m1.

1
private static <K, V> void fun(Map<K, V> a, Map<K, V> b) { 
    Map<K, V> shortestMap = a.size() < b.size() ? a : b; 
    Map<K, V> longestMap = a.size() > b.size() ? a : b; 

    Set<Entry<K, V>> shortestMapEntries = shortestMap.entrySet(); 
    Set<Entry<K, V>> longestMapEntries = longestMap.entrySet(); 

    longestMapEntries.removeAll(shortestMapEntries); 
} 
0
private static <K, V> removeDuplicates(Map<K, V> map1, Map<K, V> map2) { 
    for (K key : map1.keySet()) { 
     V val1 = map1.get(key); 
     V val2 = map2.get(key); 
     if (val2 != null && val2.equals(val1) 
      map2.remove(key); 
    } 
}