Ich habe zwei Karten wie folgt:
%Vor% Was ich tun möchte, ist, die zwei Maps in ein map3
<String, MyObject>
wie folgt zusammenzufassen:
map1.place
nicht in map2.place
ist, dann füge ich den Eintrag zu map3
hinzu. map2.place
nicht in map1.place
ist, füge ich den Eintrag zu map3
hinzu. map1.place
in map2.place
ist, dann füge ich diesen Eintrag hinzu:
map1.place, (map1.mark1, map2.mark2)
Ich habe über flatMap
gelesen, aber es fällt mir wirklich schwer, sie zu benutzen.
Irgendein Hinweis, wie man das macht?
Vielen Dank!!
Dies kann mithilfe der Stream API
mit dem passenden mergeFunction
als nächstes:
Dies verknüpft Einträge von map1
gefolgt von den Einträgen von map2
und konvertiert dann alles als Map
mit einer Zusammenführungsfunktion, die mark1
vom ersten Wert (der von map1
) und verwendet mark2
von dem zweiten Wert (der von map2
) im Falle von doppelten Schlüsseln.
Oder es könnte auch eine andere Supplier<Map>
verwendet werden, die eine Map vorschlagen würde, die bereits die Einträge von map1
enthält. Dann können wir uns nur darauf konzentrieren, die Einträge von map2
als nächstes hinzuzufügen:
Im Falle einer einfachen Zusammenführung können Sie map3.putAll () verwenden, wie in Wie kann ich zwei HashMap-Objekte mit denselben Typen kombinieren?
In Ihrem Fall müssten Sie wahrscheinlich eine benutzerdefinierte Logik schreiben,
Füllen Sie zuerst map3 mit map1 aus. Dann wiederhole die map3, um Duplikate mit map2 zu finden. In diesem Fall ersetze du den Eintrag durch die map1.place, (map1.mark1, map2.mark2)
Logik.
MapMerge
%Vor%Mein Objekt
%Vor%Tags und Links java java-stream