Ich kämpfe mit der Definition und Verwendung desVerwendung von Funktionstyp kongruent Lambda-Ausdrücke in Java 8
Stream.collect(Supplier<R> supplier, BiConsumer<R,? super T> accumulator, BiConsumer<R,R> combiner)
method in Java 8.
Die Methodensignatur enthält BiConsumer typisierte Parameter. Das BiConsumer FunctionalInterface definiert eine funktionale Methode accept(Object, Object). Soweit ich verstehe, kann ich nun jeden Lambda-Ausdruck verwenden, der congruent zu dieser funktionalen Schnittstelle ist.
Aber das Beispiel, das in dem Stream.collect JavaDoc erwähnt wird, ist z.B.
List<String> asList = stringStream.collect(ArrayList::new, ArrayList::add, ArrayList::addAll);
Ich verstehe nicht, warum ArrayList.add(E e) (Einzelparameter) ist deckungsgleich mit den BiConsumer.accept(T t, U u) Methode (zwei Parametern) und kann als Akkumulator-Funktion im Sammelverfahren verwendet werden.
Wie Sie sehen, habe ich offensichtlich einen Mangel an Verständnis und schätzen jede Erklärung.
es ist eine Abkürzung für '(Liste, Element) -> Liste .add (Element) '. Es gibt ein Duplikat, aber ich kann es jetzt nicht finden ... – assylias
http://StackOverflow.com/a/23025159/2711488 hat eine verständliche Illustration. [Diese Frage] (http://stackoverflow.com/q/23139725/2711488) könnte auch verwandt sein. – Holger