Es posible que el método reduce() no se use mucho en momentos normales, porque sus métodos comunes se encapsulan por separado. Por ejemplo sum()
, max()
, min()
,count()都是通过reduce()操作的。
reduce() son los siguientes tres métodos
Optional<T> reduce(BinaryOperator<T> accumulator)
T reduce(T identity, BinaryOperator<T> accumulator)
<U> U reduce(U identity, BiFunction<U,? super T,U> accumulator, BinaryOperator<U> combiner)
La función principal es un método de un solo parámetro. Los dos siguientes aumentan el valor inicial de identidad, y el otro es aumentar la operación de valores de múltiples segmentos durante el procesamiento paralelo.
Veamos un ejemplo:
//找出最大数
Optional<Integer> student = Stream.of(1, 2, 3, 4, 5, 6).reduce((v1, v2) -> v1 > v2 ? v1 : v2);
System.out.println(student.get());
Los resultados de salida anteriores:
6
Una prueba de dos parámetros:
//设置一个默认值,从默认值开始处理
Integer result = Stream.of(1, 2, 3, 4, 5, 6).reduce(0, (v1, v2) -> v1 + v2);
System.out.println(result);
Resultado de salida:
21
Veamos tres ejemplos de parámetros:
Integer studentId = Stream.of(1, 2, 3, 4, 5, 6).reduce(0,
(sum, v) -> {
return sum + v;
},
(s1, s2) -> s1 + s2);
Resultado de salida:
21
Si no se utiliza el procesamiento paralelo, las funciones del método de tres parámetros y dos parámetros son exactamente las mismas, y el procesamiento posterior de s1 y s2 no juega ningún papel.Después de agregar el procesamiento paralelo, el resultado puede manejar múltiples procesamientos paralelos. El resultado se procesa de nuevo, aquí hay otro ejemplo:
Integer studentId = Stream.of(1, 2, 3, 4, 5, 6).parallel().reduce(0,
(sum, v) -> {
return sum + v;
},
(s1, s2) -> s1 * s2);
System.out.println(studentId);
resultado del proceso:
720
Multiplicar múltiples resultados de procesamiento en paralelo