在番石榴中反向供应商

我正在寻找Guava中Supplier的反面。 我希望它可以被称为Consumer – 诺普 – 或者Sink – 存在,但它是原始价值观。

它隐藏在某处,我想念它吗?

我希望看到它与Supplier有用的原因相同。 不可否认,用途不太常见,但Suppliers许多静态方法,例如,将以类似的方式应用,并且在一行中表达诸如“将此供应商的每个值发送给此供应商”这样的事情将是有用的。

与此同时, PredicateFunction是丑陋的变通方法。

您的替代方案是:

  • Java 8引入了一个可以编写的Consumer接口。
  • Xtend的标准库包含Procedures
  • ScalaFunction* ; 如果函数的返回类型是Unit ,则认为是副作用。

在所有这些语言中,您可以方便地使用function接口,因此您也可以使用例如Functional Java的Effect

否则 ,您最好依靠现有的语言结构来执行副作用,例如内置的for循环。 使用lambdas时,Java <8会造成巨大的语法开销。 看到这个问题和这个讨论 。

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

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