Ich bin neu in Lambda-Ausdruck und versuchte, es in meiner Aufgabe zu verwenden.Map-Streams mit Java 8 Lambda-Ausdruck verschmelzen
Das Problem:
Ich habe zwei Karten m1
und m2
vom Typ Map<Integer, String>
, die Map<Integer, List<String>>
in einer einzigen Karte verschmolzen werden muss, in denen Werte von gleichen Tasten in den beiden Karten in einer Liste gesammelt und setzen in eine neue Karte.
Lösung basiert auf, was ich untersucht:
Map<Integer, List<String>> collated =
Stream.concat(m1.entrySet().stream(), m2.entrySet().stream()).collect(
Collectors.toMap(Entry::getKey,
Entry::getValue, (a, b) -> {
List<String> merged = new ArrayList<String>(a);
merged.addAll(b);
return merged;
}));
aber erwartet, dass diese Lösung List
Quelle Map<Integer, List<String>>
als die Merge-Funktion in toMap erwartet Operanden und Ergebnis werden vom gleichen Typ zu sein.
Ich möchte die Quellensammlung nicht ändern. Bitte geben Sie Ihre Eingaben an, um dies mit Lambda-Ausdruck zu erreichen.
Nein, es ist nicht für mich arbeiten – viktor
@viktor Haben Sie meine ursprüngliche Antwort versuchen (die nicht Kompilation bestanden hat) oder meine Antwort aktualisiert? – Eran
Danke Eran, das funktioniert. Zu meinem Verständnis - wir modifizieren Wert-Mapper, um List zu erzeugen und die gleiche Merge-Funktion von Merging Listen zu verwenden. Recht? – viktor