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>>?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage