1

给定一个值foo和一个StreamvoidConsumer<Foo>函数,将每个函数应用于该值的最简洁方法是什么?现在我有

consumers.forEach(c -> c.accept(foo));

这并不可怕,但我怀疑可能有某种方法可以把它翻过来,只用方法引用(没有明确的 lambda)来做。可能是单例列表和zip()

我会对直接的 Java 8 答案或Vavr或 Scala 感到满意。

(请注意,这不是折叠,或者至少不是通常的foldLeft/foldRight应用程序;如果有返回值,我会丢弃它们,而不是迭代它们。)

4

3 回答 3

1

我认为这里真正关心的是返回的方法void是代码气味。为什么他们不能返回有用的东西,或者至少执行它们的副作用然后返回原始值,这样可以更好地链接。我认为这将是一种更可取的方法,但除此之外,我认为 forEach 方法还可以。

于 2018-04-23T19:04:33.350 回答
0

在 Scala 中你应该能够做到

consumers.foreach(_.accept(foo));
于 2017-11-28T22:38:57.007 回答
0

您可以通过该Consumer.andThen方法减少您的消费者,然后将结果消费者应用于foo参数:

consumers.reduce(Consumer::andThen).ifPresent(c -> c.accept(foo));

但是这种方法和你的没有区别,而且你的更短。

于 2017-11-28T22:07:09.883 回答