Verschmelzen Sie zwei Karten mit Java 8

8

Ich habe zwei Karten wie folgt:

%Vor%

Was ich tun möchte, ist, die zwei Maps in ein map3 <String, MyObject> wie folgt zusammenzufassen:

  1. Wenn map1.place nicht in map2.place ist, dann füge ich den Eintrag zu map3 hinzu.
  2. gleich, wenn map2.place nicht in map1.place ist, füge ich den Eintrag zu map3 hinzu.
  3. Wenn 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!!

    
dardy 20.10.2016, 15:27
quelle

4 Antworten

12

Hier ist, was ich denke, würde funktionieren

%Vor%

Die Zusammenführungsfunktion kümmert sich um Ihr Szenario 3, denn wenn der Schlüssel bereits existiert, erstellt er ein neues MyObject mit v1.mark1 und v2.mark2

    
Ash 20.10.2016, 15:38
quelle
15

Dies kann mithilfe der Stream API mit dem passenden mergeFunction als nächstes:

%Vor%

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:

%Vor%     
Nicolas Filotto 20.10.2016 15:48
quelle
2

So etwas sollte funktionieren.

%Vor%     
talex 20.10.2016 15:37
quelle
1

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%     
Jerin Joseph 20.10.2016 15:38
quelle

Tags und Links