3 Möglichkeiten, eine Liste von Listen zu reduzieren. Gibt es einen Grund, einen davon vorzuziehen?
Angenommen, wir haben eine Liste wie folgt.CoreResult
hat ein Feld vom TypList<Double>
.
final List<CoreResult> list = new LinkedList<>(SOME_DATA);
Das Ziel ist es, die Liste nach dem Extrahieren dieses bestimmten Feldes aus jedem @ zu reduziereCoreResult
Objekt. Hier sind 3 mögliche Optionen. Ist einer von ihnen den anderen vorzuziehen?
Option : extrahiere ein Feld übermap()
und im Sammler abflachen
final List<Double> A = list.stream().map(CoreResult::getField)
.collect(ArrayList::new, ArrayList::addAll, ArrayList::addAll);
Option : extrahiere ein Feld übermap()
, über @ abflachflatMap()
, einfacher Sammler
final List<Double> B = list.stream().map(CoreResult::getField)
.flatMap(Collection::stream).collect(Collectors.toList());
Option 3: ein Feld extrahieren und in einem Zug über @ reduzierflatMap()
, einfacher Sammler
final List<Double> C = list.stream().flatMap(
x -> x.getField().stream()).collect(Collectors.toList());
Wäre die Antwort anders, wenn kein Feld aus CoreResult extrahiert werden müsste und stattdessen einfach ein @ abgeflacht werden solList<List<Double>>
?