Introduction
Lambda expression was included in Java SE 8. It provides a clear and concise way to represent one method interface using an expression. The Lambda expression is used to provide the implementation of an interface which has functional interface. It saves a lot of code. Java lambda expression is treated as a function, so compiler does not create .class file.
Functional Interface
Lambda expression provides implementation of functional interface. An interface which has only one abstract method is called functional interface. Java provides an anotation @FunctionalInterface, which is used to declare an interface as functional interface. We can use lambda expressions only with Functional interfaces.
// Functional Interface example public interface FunctionalInterface { public void show(); }
Method Reference
A method reference is the shorthand syntax for a lambda expression that executes just ONE method.
// General syntax of a method reference Object :: methodName
Since lambda expressions can be used instead of using an anonymous class.
// Not using method reference Consumer<String> c = s -> System.out.println(s); // Using method reference Consumer<String> c = System.out::println;
Syntax
(argument-list) -> {body}
Lambda expression is consisted of three components.
- Argument-list: It can be empty or non-empty as well.
- Arrow-token: It is used to link arguments-list and body of expression.
- Body: It contains expressions and statements for lambda expression.
Important Points
- A lambda expression can have zero, one or more parameters.
- The type of the parameters can be explicitly declared or it can be inferred from the context.
- Multiple parameters are enclosed in mandatory parentheses and separated by commas. Empty parentheses are used to represent an empty set of parameters.
- Body of the lambda expressions can contain zero, one or more statements. If body of lambda expression has single statement curly brackets are not mandatory and the return type of the anonymous function is the same as that of the body expression. When there is more than one statement in body than these must be enclosed in curly brackets.
Example
// Classic Comparator Comparator<Developer> byName = new Comparator<Developer>() { @Override public int compare(Developer o1, Developer o2) { return o1.getName().compareTo(o2.getName()); } }; // Lambda expression equivalent Comparator<Developer> byName = (Developer o1, Developer o2)->o1.getName().compareTo(o2.getName());
Example using method reference
// Function interface interface Sayable{ void say(); } // Public class public class MethodReference { public static void saySomething(){ System.out.println("Hello, this is static method."); } public static void main(String[] args) { // Referring static method Sayable sayable = MethodReference::saySomething; // Calling interface method sayable.say(); } }