16

我正在寻找Supplier<T>番石榴的倒数。我希望它会被称为Consumer- 不 - 或Sink- 存在,但用于原始值。

它是否隐藏在某个地方而我错过了它?

Supplier出于同样有用的原因,我希望看到它。诚然,使用不太常见,但是Suppliers例如 的许多静态方法将以类似的方式应用,并且在一行中表达诸如“向该供应商发送此迭代中的每个值”之类的内容会很有用。

与此同时,Predicate并且Function<T,Void>是丑陋的解决方法。

4

3 回答 3

9

您的替代方案是:

在所有这些语言中,您都可以方便地使用函数式接口,因此您也可以使用例如Functional JavaEffect.

否则,您最好依靠现有的语言结构来执行副作用,例如内置for循环。Java < 8 在使用 lambda 时会造成巨大的语法开销。请参阅此问题此讨论

于 2013-02-05T14:55:19.627 回答
0

您可以使用 aFunction并将第二个 Argument 设置为java.lang.VoidFunction只能返回null

于 2019-06-05T13:28:10.800 回答
-1

你已经找到了答案。如果你只是想访问,你可以使用 filter 和一个总是返回 true 的谓词;如果你是超级防御者,你可以使用任何谓词并在过滤器本身中使用带有 alwaysTrue 的 or 函数;只需or在末尾添加以避免短路。

问题是,即使我同意 Predicate 和 Consumer 在概念上是不同的,因为 Predicate 应该尽可能无状态并且没有副作用,而 Consumer 只是关于副作用,但实际上唯一的语法区别是返回一个布尔值(可以忽略)和另一个空值。如果 Guava 有一个 Consumer,则需要复制几个采用 Predicate 的方法也采用 Consumer,或者让 Consumer 从 Predicate 继承。

于 2013-02-05T08:54:33.387 回答