使用reduce


    我们来看一个简单的聚合方法:

    reduce()方法传入的对象是BinaryOperator接口,它定义了一个apply()方法,负责把上次累加的结果和本次的元素进行运算,并返回累加的结果:

    上述代码看上去不好理解,但我们用循环改写一下,就容易理解了:

    因此,实际上这个reduce()操作是一个求和。

    如果去掉初始值,我们会得到一个Optional<Integer>

    这是因为Stream的元素有可能是0个,这样就没法调用reduce()的聚合函数了,因此返回对象,需要进一步判断结果是否存在。

    利用reduce(),我们可以把求和改成求积,代码也十分简单:

    注意:计算求积时,初始值必须设置为1

    除了可以对数值进行累积计算外,灵活运用reduce()也可以对Java对象进行操作。下面的代码演示了如何将配置文件的每一行配置通过map()reduce()操作聚合成一个Map<String, String>

    使用reduce - 图1

    reduce()方法将一个Stream的每个元素依次作用于BinaryOperator,并将结果合并。

    读后有收获可以支付宝请作者喝咖啡,读后有疑问请加微信群讨论:

    使用reduce - 图2