如何使用不同类型的流减少?
Posted
技术标签:
【中文标题】如何使用不同类型的流减少?【英文标题】:How to use stream reduce with different types? 【发布时间】:2021-07-10 22:00:27 【问题描述】:我有一个One
类型的值流,我想将它们减少为Sum
类型的值。 (它不是整数,只是举例)。
而且,我有一个BiFunction
求和器,它返回Sum
(Sum sum = transformer.apply(sum, one)
有一些逻辑)。
并且有一个初始值Sum
(Sum.INITIAL
)。
试图做类似的事情:
source.stream().reduce(Sum.INITIAL, (Sum sum, One one) -> transformer.apply(sum, one));
source
的位置 - One
s 的列表。
还有"Bad return type in lambda expression: Sum cannot be converted to One"
。
【问题讨论】:
transformer
是什么类型的? One
和 Sum
是否相关(如果不是,您必须在某个地方进行映射)?
【参考方案1】:
您需要组合函数作为第三个参数。
source.stream().reduce(Sum.INITIAL,
(Sum sum, One one) -> transformer.apply(sum, one),
(Sum s1, Sum s2) -> /*combine, e.g. return s1.add(s2)*/);
【讨论】:
是的,当然!我需要忘记旧的总和,只得到新的总和!太感谢了。最终解决方案:source.stream().reduce(Sum.INITIAL,transformer,(Sum s1, Sum s2) -> s2); @МаксимМальцев 乐于助人。以上是关于如何使用不同类型的流减少?的主要内容,如果未能解决你的问题,请参考以下文章