java.util.function.Consumer
does not extend java.util.function.Function
. But what if you want a set of both types? Why isn’t there a ConsumerFunction?
A ConsumerFunction is not defined in java.util.function
. You can easily do it yourself. But you will see that it’s not that simple. void
is a keyword in Java. There is a class Void
and (by reflection) you can even get an instance of Void
. But you have to use a return statement to get a Function
.
If you really need a ConsumerFunction
for some reason you can use my implementation. It’s just one file so I put it on pastebin.com:
Here’s some example code:
// We need a variable of type ConsumerFunction:
ConsumerFunction<String> cf;
// We can assign a Lambda to it:
cf = (s) -> {
System.out.println(s);
return ConsumerFunction.VOID;
};
// Or convert a Consumer to a ConsumerFunction:
cf = ConsumerFunction.toFunction(System.out::println);
// And that's how we use it:
cf.accept("Hello World");
// A ConsumerFunction *is* a Function:
Function<String, Void> fn = cf;
// But it can be converted to a Consumer too:
Consumer<String> c = cf.toConsumer();
PS: If you are looking for a way to “convert” other functions such as IntFunction<T> => Function<Integer, T>
then try this:
IntFunction<int[]> ctor = int[]::new;
Function<Integer, int[]> ctor2 = ctor::apply;