【发布时间】:2018-05-12 11:53:22
【问题描述】:
给定一个值 foo 和一个 Stream 的 Consumer<Foo> void 函数,将每个函数应用于该值的最简洁方法是什么?现在我有
consumers.forEach(c -> c.accept(foo));
这并不可怕,但我怀疑可能有某种方法可以将其翻转过来并仅使用方法引用(没有明确的 lambda)来完成。可能是单例列表和zip()?
我会很高兴有一个直接的 Java 8 答案、Vavr 或 Scala。
(请注意,这不是折叠,或者至少不是通常的 foldLeft/foldRight 应用程序;如果有返回值,我会丢弃它们,而不是迭代它们。)
【问题讨论】:
-
通过
Consumer#andThen(Consumer after)连接是一个有效的选项吗? -
有趣的问题,但在 Java 中,没有什么比您已经拥有的更简单、简洁或在典型 VM 中表现出色了。
-
forEach和 void 函数不用于函数式成语......您正在寻找不存在的东西 -
@naomik 好的,如果你发现它不存在,就假装它是
functions.map(f -> f.apply(foo))。 -
@naomik 考虑一下 IO monad。
标签: java scala functional-programming vavr