188. Hooking lambda laziness via Supplier/Consumer
The java.util.function.Supplier
is a functional interface capable of supplying results via its get()
method. The java.util.function.Consumer
is another functional interface capable of consuming the argument given via its accept()
method. It returns no result (void
). Both of these functional interfaces are lazy, so it is not that easy to analyze and understand code that uses them, especially when a snippet of code uses both. Let’s give it a try!
Consider the following simple class:
static class Counter {
static int c;
public static int count() {
System.out.println("Incrementing c from "
+ c + " to " + (c + 1));
return c++;
}
}
And let’s write the following Supplier
and Consumer
:
Supplier<Integer> supplier = () -> Counter.count();
Consumer<Integer> consumer = c -> {
c = c + Counter.count();
System.out.println("Consumer: " + c )...