首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >芭乐中Supplier<T>的反转

芭乐中Supplier<T>的反转
EN

Stack Overflow用户
提问于 2013-02-05 15:40:06
回答 3查看 5.5K关注 0票数 16

我正在寻找Supplier<T>在芭乐的反面。我希望它被称为Consumer - nope -或Sink - exists,但它是用于原始值的。

是不是藏在什么地方而我错过了?

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

同时,PredicateFunction<T,Void>是丑陋的变通方法。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-05 22:55:20

您的替代方案是:

  • Java 8 compose.
  • 's引入了一个可以在标准库中包含Procedures.
  • Function*Consumer接口;如果一个函数的返回类型是Unit,就会被认为是一个副作用。

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

否则,你最好依靠现有的语言构造来执行副作用,例如内置的for循环。Java <8在使用lambdas时会带来巨大的语法开销。参见this questionthis discussion

票数 9
EN

Stack Overflow用户

发布于 2019-06-05 21:28:11

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

票数 0
EN

Stack Overflow用户

发布于 2013-02-05 16:54:33

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

问题是,尽管我同意谓词和消费者在概念上是不同的,因为谓词应该是尽可能无状态的,并且没有副作用,而消费者只关心副作用,但在实践中,唯一的语法差异是一个返回布尔值(可以忽略),而另一个是空的。如果Guava有一个Consumer,它将需要复制几个带有谓词的方法,或者让Consumer从Predicate继承。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14702380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档