reduce 详细解析 Java 8 Stream API 中的 reduce 方法
reduce
方法在 Java 8 的 Stream API 中用于对流中的元素进行累计操作。它可以将流中的元素按照给定的函数进行结合,生成一个结果。
reduce
方法有三个版本:
reduce(T identity, BinaryOperator accumulator)
:使用提供的身份值和累计函数进行累计。reduce(BinaryOperator accumulator)
:没有身份值的版本,流中的第一个元素作为累积的初始值。reduce(U identity, BiFunction<U, ? super T, U> accumulator, BinaryOperator combiner)
:带有组合函数的版本,适用于并行流。
示例代码:
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class ReduceExample {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
// 使用身份值和累积函数进行累加
Integer sumWithIdentity = numbers.stream().reduce(0, (a, b) -> a + b);
System.out.println("Sum with identity: " + sumWithIdentity); // 输出:Sum with identity: 15
// 不指定身份值,流中的第一个元素作为初始累积值
Optional<Integer> sumWithoutIdentity = numbers.stream().reduce((a, b) -> a + b);
sumWithoutIdentity.ifPresent(System.out::println); // 输出:Sum without identity: 15
// 并行流的累积,使用组合函数
Integer sumParallel = numbers.parallelStream().reduce(0, (a, b) -> a + b, (a, b) -> a + b);
System.out.println("Sum parallel: " + sumParallel); // 输出:Sum parallel: 15
}
}
在这个例子中,我们展示了如何使用 reduce
方法进行简单的加法操作。第一个版本使用了身份值 0
作为累积的初始值,而第二个版本假设流中至少有一个元素,并且不提供身份值。最后,并行流的版本使用了一个组合函数来合并从不同线程返回的结果。
评论已关闭