Guava </>中供应商的反向<t>

时间:2013-02-05 07:40:06

标签: java functional-programming guava

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

隐藏在某个地方,我想念它吗?

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

与此同时,PredicateFunction<T,Void>是难看的解决方法。

3 个答案:

答案 0 :(得分:8)

您的替代方案是:

在所有这些语言中,您可以方便地使用功能界面,因此您也可以使用例如Functional JavaEffect

否则,您最好依靠现有的语言结构来执行副作用,例如:内置的for循环。 Java&lt;使用lambda时,8会造成巨大的语法开销。请参阅this questionthis discussion

答案 1 :(得分:0)

您可以使用Function并将第二个参数设置为java.lang.Void,此Function只能返回null

答案 2 :(得分:-1)

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

问题在于,即使我同意概念谓词和消费者是不同的,因为谓词应该尽可能无状态并且没有副作用,而消费者只是副作用,实际上唯一的句法区别是一个返回一个布尔值(可以忽略),另一个返回void。如果Guava有一个Consumer,那么它需要复制一些方法,这些方法使Predicate也接受Consumer或者Consumer从Predicate继承。