如何使用不同类型的流减少?

How to use stream reduce with different types?

我有一个类型为 One 的值流,我想将它们缩减为一个类型为 Sum 的值。 (它不是整数,只是举例)。 而且,我有一个 BiFunction 求和器 returns SumSum sum = transformer.apply(sum, one) 有一些逻辑)。 并且初始值为 Sum (Sum.INITIAL).

试图做类似的事情:

source.stream().reduce(Sum.INITIAL, (Sum sum, One one) -> transformer.apply(sum, one));

其中 source - One 的列表。 并且有 "Bad return type in lambda expression: Sum cannot be converted to One".

您需要组合函数作为第三个参数。

source.stream().reduce(Sum.INITIAL, 
    (Sum sum, One one) -> transformer.apply(sum, one),
    (Sum s1, Sum s2) -> {/*combine, e.g. return s1.add(s2)*/});