Ich muss alle Schlüssel und Werte von einer A-HashMap auf eine andere B kopieren, aber vorhandene Schlüssel und Werte nicht ersetzen.
Was ist der beste Weg, das zu tun?
Ich dachte stattdessen, ich würde das keySet iterieren und prüfen, ob es existiert oder nicht
Map temp = new HashMap(); // generic later
temp.putAll(Amap);
A.clear();
A.putAll(Bmap);
A.putAll(temp);
removeAll
da sie sowieso überschrieben werden.patch.forEach(target::putIfAbsent)
.Mit Guava ‚s Karten Klasse‘ Utility Methoden , um die Differenz von 2 Karten berechnen Sie es in einer einzigen Zeile tun, mit einer Signatur der Methode , die es macht klar , was Sie versuchen zu erreichen:
quelle
Einfach iterieren und hinzufügen:
Bearbeiten, um hinzuzufügen:
Wenn Sie Änderungen an a vornehmen können, können Sie auch Folgendes tun:
und ein Wille hat genau das, was Sie brauchen. (alle Einträge in
b
und alle Einträge ina
, die nicht in sindb
)quelle
entrySet()
gibt a zurückSet<Map.Entry>
. 2.) Es gibt keine Methodecontains(...)
fürjava.util.Map
.Sie können es in nur einer Zeile machen, wenn Sie die Kartenreihenfolge in @ ericksons Lösung ändern:
In diesem Fall ersetzen Sie Werte in mapWithNotSoImportantValues durch Werte aus mapWithImportantValues mit denselben Schlüsseln.
quelle
quelle
Mit Java 8 gibt es diese API-Methode, um Ihre Anforderungen zu erfüllen.
Wenn der angegebene Schlüssel noch keinem Wert zugeordnet ist (oder null zugeordnet ist), ordnet er dem angegebenen Wert zu und gibt null zurück, andernfalls wird der aktuelle Wert zurückgegeben.
quelle