Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Inverse of Supplier<T> in Guava

I'm looking for the inverse of Supplier<T> in Guava. I hoped it would be called Consumer – nope – or Sink – exists, but is for primitive values.

Is it hidden somewhere and I'm missing it?

I'd like to see it for the same kinds of reasons that Supplier is useful. Admittedly, uses are less common, but many of the static methods of Suppliers, for example, would apply in an analogous way, and it would be useful to express in one line things like "send this supplier every value in this iterable".

In the meantime, Predicate and Function<T,Void> are ugly workarounds.

like image 358
BeeOnRope Avatar asked Feb 05 '13 07:02

BeeOnRope


1 Answers

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.

like image 57
thSoft Avatar answered Oct 22 '22 00:10

thSoft