在Java 8 里面,我们看到了有个reduce方法,具体也不知道是干啥的,我就简单的用几个实例,看看,这方法到底是干什么的。
Java 8 湿胸我也就处于摸索阶段。慢慢摸索嘛,不着急。
话不多说,看代码。
/**
* T reduce(T identity, BinaryOperator<T> accumulator);
* identity:它允许用户提供一个循环计算的初始值。
* accumulator:计算的累加器,
*/
private static void testReduce() {
//T reduce(T identity, BinaryOperator<T> accumulator);
System.out.println("给定个初始值,求和");
System.out.println(Stream.of(1, 2, 3, 4).reduce(100, (sum, item) -> sum + item));
System.out.println(Stream.of(1, 2, 3, 4).reduce(100, Integer::sum));
System.out.println("给定个初始值,求min");
System.out.println(Stream.of(1, 2, 3, 4).reduce(100, (min, item) -> Math.min(min, item)));
System.out.println(Stream.of(1, 2, 3, 4).reduce(100, Integer::min));
System.out.println("给定个初始值,求max");
System.out.println(Stream.of(1, 2, 3, 4).reduce(100, (max, item) -> Math.max(max, item)));
System.out.println(Stream.of(1, 2, 3, 4).reduce(100, Integer::max));
//Optional<T> reduce(BinaryOperator<T> accumulator);
// 注意返回值,上面的返回是T,泛型,传进去啥类型,返回就是啥类型。
// 下面的返回的则是Optional类型
System.out.println("无初始值,求和");
System.out.println(Stream.of(1, 2, 3, 4).reduce(Integer::sum).orElse(0));
System.out.println("无初始值,求max");
System.out.println(Stream.of(1, 2, 3, 4).reduce(Integer::max).orElse(0));
System.out.println("无初始值,求min");
System.out.println(Stream.of(1, 2, 3, 4).reduce(Integer::min).orElse(0));
}
代码运行结果:
乍一看,上面好像,也就是对数据的操作,例子里面有求和的,求最大值的,求最小值的。就这三个
有疑问的,就是这个返回值类型,其中有个是 Optional 类。
这个类是从Java 8 开始,才有的。他就是为了防止出现空值,也就是null。