【问题标题】: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 是否相关(如果不是,您必须在某个地方进行映射)?

标签: java functional-programming java-stream reduce


【解决方案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);
  • @МаксимМальцев 乐于助人。
猜你喜欢
  • 2017-12-08
  • 1970-01-01
  • 2018-10-13
  • 2018-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-15
  • 1970-01-01
相关资源
最近更新 更多