2359. Java 8 - Lazy Execution with Lambda
Lazy and Supplier
Functional Interfaces in Java 8.
1. Examples
modern java page 222.
if (logger.isLoggable(Log.FINER)) { logger.finer("Problem: " + generateDiagnostic()); } logger.log(Level.FINER, "Problem: " + generateDiagnostic()); public void log(Level level, Supplier<String> msgSupplier) logger.log(Level.FINER, () -> "Problem: " + generateDiagnostic());
another example
public class NonLazyCodeExample { public static void main(String args[]) { final int number = 4; final boolean computeResult = compute(number); final boolean processResult = process(number); if (computeResult && processResult) { System.out.println("TRUE"); } else { System.out.println("FALSE"); } } public static boolean compute(final int number) { System.out.println("computing number : " + number); return number > 5 ? true : false; } public static boolean process(final int number) { System.out.println("processing number : " + number); return number % 3 == 0 ? true : false; } }
logging function in lambda.
List<Integer> result = numbers.stream() .peek(x -> System.out.println("from stream: " + x)) .map(x -> x + 17) .peek(x -> System.out.println("after map: " + x)) .filter(x -> x % 2 == 0) .peek(x -> System.out.println("after filter: " + x)) .limit(3) .peek(x -> System.out.println("after limit: " + x)) .collect(toList());
This code produces useful output at each step of the pipeline:
from stream: 2
after map: 19
from stream: 3
after map: 20
after filter: 20
after limit: 20
from stream: 4
after map: 21
from stream: 5
after map: 22
after filter: 22
after limit: 22