java8 Stream API之reduce使用说明

reduce() 是 Stream API 的一个终端操作,它能够将 stream 中所有元素反复结合起来,得到一个最终值。

Java8 Stream API之reduce使用说明

简介

reduce() 是 Stream API 的一个终端操作,它能够将 stream 中所有元素反复结合起来,得到一个最终值。

语法

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);

参数说明

  • accumulator :接收两个参数,处理并返回一个同类型的值。
  • identity :起始值。
  • combiner :合并操作。

示例说明

示例1:求和

int sum = Stream.of(1, 2, 3, 4, 5)
                .reduce(0, Integer::sum);
System.out.println(sum);

输出结果为:

15

解释:

使用起始值 0,确保 reduce() 能够正确执行。然后,reduce()0 作为第一个操作数传递给累加器方法 Integer::sum,也就是计算出 0+1=1。然后,1 作为第一个操作数,继续传递给Integer::sum 方法,也就是计算出 1+2=3,以下同理,最终得到结果为 15

示例2:求最大值

Optional<Integer> max = Stream.of(1, 2, 3, 4, 5)
                                .reduce(Integer::max);
max.ifPresent(System.out::println);

输出结果为:

5

解释:

这里使用了一个 Optional 类型,因为我们并不确定操作前的流中是否有值,如果没有值,那么 max 会返回一个空的 Optional 对象,否则返回一个包含最大值的 Optional 对象。

同样地,使用 reduce() 求最小值也是类似的:

Optional<Integer> min = Stream.of(1, 2, 3, 4, 5)
                                .reduce(Integer::min);
min.ifPresent(System.out::println);

输出结果为:

1

总结

reduce() 是 Stream API 中一个非常强大的操作,可以实现对 stream 中的元素进行累加、计数、求最值等多种操作。同时,Java8 还提供了 reduce() 的其他重载函数,实现多种操作的灵活组合。因此,熟练掌握 reduce() 操作,是 Java8 开发中非常重要的一点。

本文标题为:java8 Stream API之reduce使用说明

基础教程推荐