首先我们看什么是reduce 模式:
Object accumulator = initialValue;
for (Object element : collection )
accumulator = combine (accumulator ,element );
return accumulator;
首先给累积器赋初值,然后遍历目标集合,使得每一个元素与累积器做运算,得到的结果刷新累积器,遍历完成,返回累积器中的结果。这就是reduce 模式。
仔细想想,max 和 min,从集合中获得最大值,最小值也可以使用reduce 模式实现。
下面我们看一下 java8 提供的reduce 接口,在stream.class 中,提供了三种形式的reduce 操作:
Optional<T> reduce (BinaryOperator<T> accumulator);
<U> U reduce(U identity, BiFunction<U,? super T, U> accumulator, BinaryOperator<U> combiner);
T reduce(T identity , BinaryOperator<T> accumulator);