Java Lambda
Java Lambda Expressions
Lambda expressions were introduced in Java 8 as a way to provide a concise syntax for expressing instances of single-method interfaces (functional interfaces). Lambda expressions make it easier to work with functional interfaces and enable the use of functional programming constructs in Java.
The simplest lambda expression contains a single parameter and an expression:
Syntax
parameter -> expression
Using Lambda Expressions
Lambda expressions are usually passed as parameters to a function:
Use a lambda expression in the ArrayList's forEach() method to print every item in the list:
Example
>
import java.util.ArrayList;
public class Main {
public static void main( String[] args) {
ArrayList numbers = new ArrayList();
numbers.add(5);
numbers.add(9);
numbers.add(8);
numbers.add(1);
numbers.forEach( (n) -> { System.out.println(n); } );
}
}
Lambda expressions can be stored in variables if the variable's type is an interface which has only one method. The lambda expression should have the same number of parameters and the same return type as that method. Java has many of these kinds of interfaces built in, such as the Consumer interface (found in the java.util package) used by lists.
Use Java's Consumer interface to store a lambda expression in a variable:
Example
import java.util.ArrayList; import java.util.function.Consumer; public class Main { public static void main( String[] args) { ArrayListnumbers = new ArrayList(); numbers.add(5); numbers.add(9); numbers.add(8); numbers.add(1); Consumermethod = (n) -> { System.out.println(n); }; numbers.forEach( method ); } }
To use a lambda expression in a method, the method should have a parameter with a single-method interface as its type. Calling the interface's method will run the lambda expression:
Create a method which takes a lambda expression as a parameter:
Example
> interface StringFunction { String run( String str); } public class Main { public static void main( String[] args) { StringFunction exclaim = (s) -> s + "!"; StringFunction ask = (s) -> s + "?"; printFormatted( "Hello", exclaim); printFormatted( "Hello", ask); } public static void printFormatted( String str, StringFunction format) { String result = format.run(str); System.out.println( result); } }