我正在寻找Supplier<T>在芭乐的反面。我希望它被称为Consumer - nope -或Sink - exists,但它是用于原始值的。
是不是藏在什么地方而我错过了?
我希望看到它的原因和Supplier有用的原因是一样的。诚然,使用不是很常见,但是Suppliers的许多静态方法,例如,将以类似的方式应用,并且在一行中表示类似于“将此迭代器中的每个值发送给此供应商”之类的内容将是有用的。
同时,Predicate和Function<T,Void>是丑陋的变通方法。
发布于 2013-02-05 22:55:20
您的替代方案是:
在所有这些语言中,您可以方便地使用函数接口,因此您也可以使用例如Functional Java的Effect。
否则,你最好依靠现有的语言构造来执行副作用,例如内置的for循环。Java <8在使用lambdas时会带来巨大的语法开销。参见this question和this discussion。
发布于 2019-06-05 21:28:11
您可以使用Function并将第二个参数设置为java.lang.Void。此Function只能返回null。
发布于 2013-02-05 16:54:33
你已经找到了答案。如果您只是想访问,可以使用带有总是返回true的谓词的过滤器;如果您是超级防御型的,您可以使用任何谓词,并在过滤器本身中使用带有alwaysTrue的或函数;只需在末尾添加or以避免短路。
问题是,尽管我同意谓词和消费者在概念上是不同的,因为谓词应该是尽可能无状态的,并且没有副作用,而消费者只关心副作用,但在实践中,唯一的语法差异是一个返回布尔值(可以忽略),而另一个是空的。如果Guava有一个Consumer,它将需要复制几个带有谓词的方法,或者让Consumer从Predicate继承。
https://stackoverflow.com/questions/14702380
复制相似问题