Inverse of Supplier in Guava

前端 未结 3 2023
盖世英雄少女心
盖世英雄少女心 2021-02-19 02:54

I\'m looking for the inverse of Supplier in Guava. I hoped it would be called Consumer – nope – or Sink – exists, but is for pri

相关标签:
3条回答
  • 2021-02-19 03:15

    You can use a Function and set the second Argument to java.lang.Void this Function can only return null.

    0 讨论(0)
  • 2021-02-19 03:20

    You have already found the answer. If you just want to visit, you can use filter with a predicate that always returns true; if you are super defensive you can use any predicate and use an or function with an alwaysTrue in the filter itself; just add the or at the end to avoid shortcircuiting.

    The problem is that even though I agree that conceptually Predicate and Consumer are different since a Predicate should be as stateless as possible and not have side effects while a consumer is only about the side effects, in practice the only syntactic difference is that one returns a boolean (that can be ignored) and the other void. If Guava had a Consumer, it would need to either duplicate several of the methods that take a Predicate to also take a Consumer or have Consumer inherit from Predicate.

    0 讨论(0)
  • 2021-02-19 03:28

    Your alternatives are:

    • Java 8 introduces a Consumer interface which you can compose.
    • Xtend's standard library contains Procedures.
    • Scala has Function*; if a function's return type is Unit, it is considered a side effect.

    In all of these languages, you can use functional interfaces conveniently, so you could also use e.g. Functional Java's Effect.

    Otherwise, you better rely on existing language constructs for performing side effects, e.g. the built-in for loop. Java < 8 inflicts tremendous syntactic overhead when using lambdas. See this question and this discussion.

    0 讨论(0)
提交回复
热议问题