Java stream Collect (Proveedor, BiConsumer, BiConsumer)

<R> R collect(Supplier<R> supplier,
              BiConsumer<R,? super T> accumulator,
              BiConsumer<R,R> combiner)

Parámetro 1: supplierEl getmé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: accumulatorEl acceptmé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 combinerinterfaz acceptpara procesar el accumulatorcontenedor 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-

Supongo que te gusta

Origin blog.csdn.net/claroja/article/details/114048061
Recomendado
Clasificación