<R> R collect(Supplier<R> supplier,
BiConsumer<R,? super T> accumulator,
BiConsumer<R,R> combiner)
Parámetro 1: supplier
El get
método de la interfaz , que proporciona un contenedor (List, Map, Set) como el parámetro del acumulador y el combinador, y es el valor de retorno final (el mismo que la restricción genérica R).
Parámetro 2: accumulator
El accept
método de la interfaz maneja el proveedor El contenedor de tipo R proporcionado y los elementos de la secuencia, como agregar elementos al contenedor. Agregación local de la secuencia.
Parámetro 3: Método de combiner
interfaz accept
para procesar el accumulator
contenedor de tipo R generado localmente . Agregación global de los resultados locales
Hay tres formas de escribir, preste atención a la correspondencia entre
1. Utilice el ejemplo de la clase de implementación
package com;
import java.util.LinkedList;
import java.util.List;
import java.util.function.BiConsumer;
import java.util.function.Supplier;
public class App2 {
public static void main(String[] args) {
LinkedList<Integer> integers = new LinkedList<>();
integers.add(1);
integers.add(2);
integers.add(3);
List res = integers.stream().collect(
new Supplier<List>() {
@Override
public List get() {
return new LinkedList();
}
},
new BiConsumer<List, Integer>() {
@Override
public void accept(List list, Integer integer) {
list.add(integer);
}
},
new BiConsumer<List, List>() {
@Override
public void accept(List list, List list2) {
list.addAll(list2);
}
}
);
System.out.println(res);
}
}
2. Utilice el ejemplo lambda
package com;
import java.util.LinkedList;
import java.util.List;
public class App2 {
public static void main(String[] args) {
LinkedList<Integer> integers = new LinkedList<>();
integers.add(1);
integers.add(2);
integers.add(3);
List res = integers.stream().collect(
()->new LinkedList(),
(list, integer) -> list.add(integer),
(list1,list2) -> list1.addAll(list2)
);
System.out.println(res);
}
}
3. Utilice la referencia del método
package com;
import java.util.LinkedList;
import java.util.List;
public class App2 {
public static void main(String[] args) {
LinkedList<Integer> integers = new LinkedList<>();
integers.add(1);
integers.add(2);
integers.add(3);
List res = integers.stream().collect(
LinkedList::new,
List::add,
List::addAll
);
System.out.println(res);
}
}
Referencia:
https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#collect-java.util.function.Supplier-java.util.function.BiConsumer-java. util.function.BiConsumer-