Lesson 2 / 38
Lambdas & Method References
Pass behaviour as data with lambdas over functional interfaces like Function and Predicate, use method references, and respect effectively-final capture.
Functional interfaces
A lambda is an instance of an interface with exactly one abstract method (Runnable, Comparator, Function, Predicate, Supplier, Consumer). The compiler infers parameter types from the target type.
Syntax forms
A method reference (String::toUpperCase, System.out::println, ArrayList::new) is a shorthand for a lambda that just forwards its arguments.
Comparator<String> byLen = (a, b) -> a.length() - b.length();
Runnable task = () -> System.out.println("run");
Function<String, Integer> len = String::length;
list.sort(Comparator.comparing(String::length));Effectively final capture
A lambda can read local variables from the enclosing scope only if they are final or never reassigned. Instance and static fields have no such limit.