ich nicht den Nutzen des dritten Parameter des folgenden Verfahrens verstehen:Über collect (Lieferant, Akkumulator, Kombinierer)
<R> R collect(Supplier<R> supplier,
BiConsumer<R,? super T> accumulator,
BiConsumer<R,R> combiner)
von javaDoc:
Dies erzeugt ein Ergebnis gleichwertig zu:
R result = supplier.get(); for (T element : this stream) accumulator.accept(result, element); return result;
Wie Sie sehen können, wird der Parameter combiner
nicht verwendet. Zum Beispiel werden die folgenden Zeichenfolgen in einer Arraylist akkumulieren:
List<String> asList = stringStream.collect(ArrayList::new, ArrayList::add,
ArrayList::addAll);
aber ich erwartete dies:
List<String> asList = stringStream.collect(ArrayList::new, ArrayList::add);
Wenn parallel verarbeitet, wird die ursprüngliche Stream-Reihenfolge im Ergebnis nach dem Kombinieren nicht garantiert. Recht? – Chen
@Chen Ich glaube das hängt davon ab, dass der Combiner an 'collect' übergeben wird. Der Combiner kann die ursprüngliche Reihenfolge beibehalten. – Eran