我正在寻找番石榴中Supplier<T>
的倒数。我希望它会被称为Consumer
- nope - 或Sink
- 存在,但它适用于原始值。
隐藏在某个地方,我想念它吗?
我希望看到它Supplier
有用的原因相同。诚然,使用不太常见,但是Suppliers
的许多静态方法,例如,将以类似的方式应用,并且在一行中表达诸如“向此供应商发送每个值的内容”将是有用的。可迭代”。
与此同时,Predicate
和Function<T,Void>
是难看的解决方法。
答案 0 :(得分:8)
您的替代方案是:
在所有这些语言中,您可以方便地使用功能界面,因此您也可以使用例如Functional Java的Effect
。
否则,您最好依靠现有的语言结构来执行副作用,例如:内置的for
循环。 Java&lt;使用lambda时,8会造成巨大的语法开销。请参阅this question和this discussion。
答案 1 :(得分:0)
您可以使用Function
并将第二个参数设置为java.lang.Void,此Function
只能返回null
。
答案 2 :(得分:-1)
你已经找到了答案。如果您只想访问,可以使用带有始终返回true的谓词的过滤器;如果你是超级防御者,你可以使用任何谓词并在过滤器本身中使用带有alwaysTrue的函数或函数;只需在末尾添加or
以避免短路。
问题在于,即使我同意概念谓词和消费者是不同的,因为谓词应该尽可能无状态并且没有副作用,而消费者只是副作用,实际上唯一的句法区别是一个返回一个布尔值(可以忽略),另一个返回void。如果Guava有一个Consumer,那么它需要复制一些方法,这些方法使Predicate也接受Consumer或者Consumer从Predicate继承。