2009-05-07 23 views
1

Ich brauche einen kleinen Code-Snippet zu schreiben, wo ich brauche Inhalt einer Karte (Schlüsselwertes) zu überprüfen, ob es in einer anderen Karte vorhanden ist, entfernen Sie sie aus der KarteÜberprüfung Inhalt einer Karte in einer anderen Karte in Java

Eg

Map1:

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

Andere Karte Map2:

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

Das Ergebnis des Spaßes (Map1, Map2) , nachdem er es hat folgenden ouput

Map2 ausführt:

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

Ist Iterieren über die kleinere Karte und Überprüfung Inhalt (Schlüssel, Wert) über die iteriert kleinere Karte und Überprüfung der Schlüssel und Inhalte in der größeren Karte der effizienteste Weg, um darüber zu gehen.

+0

Seltsame Frage :), was passiert, wenn beide Karten die gleiche Länge haben ??? – pgras

+0

Entweder verstehe ich dich wirklich nicht oder du hast einen Fehler. Möchten Sie einen Karteneintrag für map2 entfernen, wenn der Schlüssel in map1 als Schlüssel existiert? – Sietse

+0

Das Ergebnis, wie ich verstanden habe, ist eine neue Karte mit allen Objekten aus Map2, die nicht in Map1 sind. – tuergeist

Antwort

0

Siehe java.util.Collection

boolean removeAll(Collection<?> c) 
+0

Map! = Collection – tuergeist

+0

Karte hat keySet() -Methode, die ein Set zurückgibt. Set erweitert die Sammlung. – diciu

+0

entrySet() anstelle von keySet(). Er möchte nach vollständigen Zuordnungen suchen und entfernen, nicht nur nach Schlüsseln. –

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

wo m1 die Karte geändert werden soll, und m2 ist die Karte mit den Zuordnungen, die von m1 entfernt werden müssen.

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); 
    } 
} 
Verwandte Themen