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

Posted

技术标签:

【中文标题】如何使用不同类型的流减少?【英文标题】:How to use stream reduce with different types? 【发布时间】:2021-07-10 22:00:27 【问题描述】:

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

试图做类似的事情:

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

source 的位置 - Ones 的列表。 还有"Bad return type in lambda expression: Sum cannot be converted to One"

【问题讨论】:

transformer 是什么类型的? OneSum 是否相关(如果不是,您必须在某个地方进行映射)? 【参考方案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); @МаксимМальцев 乐于助人。

以上是关于如何使用不同类型的流减少?的主要内容,如果未能解决你的问题,请参考以下文章

C++ 中的流类型,如何从 IstringStream 中读取?

Java中有几种类型的流

如何将记录拆分为不同的流,从一个主题到不同的流?

如何导出从另一个文件导入的流类型定义?

如何使用具有多种消息类型的破坏者

如何使用 MNIST 在 tensorflow 中减少权重位或更改为较低位的类型?