java8的stream api极大的简化了对集合的操作,有map,flatmap,filter,peek等中间操作,也有collect,count,min,max,reduce等终结操作。中间操作符合惰性求值的原则,还是返回一个stream,而终止操作则会立刻触发计算动作,其中collect操作比较常用,大家用的都比较熟,下面来介绍一下reduce操作,其实min,max都是reduce操作中的特殊的两种,只是因为使用比较频发,所以被单独拎出来变成了一个方法。
先看看reduce在源码中有几种方法签名
T reduce(T identity, BinaryOperator<T> accumulator);
Optional<T> reduce(BinaryOperator<T> accumulator);
常见的就这两种方法签名,其中一个T identity的是默认值或者初始值,而不带默认值或者初始值的则默认取的是前两个,返回一个Optional。
eg:使用reduce求多个数的和
Integer sum = Stream.of(1, 2, 3).reduce(0, Integer::sum);
System.out.println(sum);
其中的变化有很多,需要多加实践。