ich wie eine Karte konvertieren möchte:Merge alle Listenwerte zusammen in einer Karte
Map<String, List<String>>
zu
List<String>
wo der Ergebnisliste die Zusammenführung aller Listenwerte.
ich wie eine Karte konvertieren möchte:Merge alle Listenwerte zusammen in einer Karte
Map<String, List<String>>
zu
List<String>
wo der Ergebnisliste die Zusammenführung aller Listenwerte.
können Sie haben gerade
List<String> result = map.values().stream().flatMap(List::stream).collect(Collectors.toList());
Dies ruft die Werte der Karte mit values()
dann flach Karten jede Liste in einen Strom, der durch seine Elemente und sammelt das Ergebnis in einer Liste.
Eine weitere Alternative, ohne flaches Abbilden jeder Liste, und damit leistungsfähiger sein kann, ist direkt an den Stream<List<String>>
(durch values().stream()
zurückgegeben) zu sammeln durch addAll
auf jedem akkumulierte Ergebnis ruft.
List<String> result = map.values().stream().collect(ArrayList::new, List::addAll, List::addAll);
Verwenden flatMap
auf der Stream
von Karteneinträge:
List<String> list = map.entrySet()
.stream()
.flatMap(e->e.getValue().stream())
.collect(Collectors.toList());
Eran: Auf eine andere Anmerkung, führt obige Aussage in die Erstellung von mehr temporäre Objekte mit jeder Operation (FlatMap und sammeln)? –
@Ravindrababu Mehr temporäre Objekte im Vergleich zu was? – Eran
Ich meine, wie Scala, map.flatMap() Rückgabe unveränderliche Sammlung und dann sammeln() Rückgabe neuer Satz von unveränderlichen Sammlung –
Beantworter, stellen Sie bitte keine fertigen Lösungen für solche Fragen zur Verfügung. Wir wollen sie hier nicht ermutigen. Lassen Sie uns OP helfen, indem Sie ihn zuerst selbst versuchen lassen. – Maroun
ist keine fertige Lösung, was bedeutet das? – ypriverol
Siehe http://stackoverflow.com/questions/29826417/how-to-retainall-of-list-of-lists-using-stream-reduce/29826611 –