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 )...