JavaLambda Expressions
Java Lambda Expressions
Lambda Expressions were added in Java 8.
A lambda expression is a short block of code which takes in parameters and returns avalue. Lambda expressions are similar to methods, but they do not need a name and theycan be implemented right in the body of a method.
Syntax
The simplest lambda expression contains a single parameter and an expression:
parameter ->expression
To use more than one parameter, wrap them in parentheses:
(parameter1, parameter2) ->expression
Expressions are limited. They have to immediately return a value, and they cannot containvariables, assignments or statements such asif
orfor
. In order to do more complexoperations, a code block can be used with curly braces. If the lambda expression needs toreturn a value, then the code block should have areturn
statement.
(parameter1, parameter2) -> {code block }
Using Lambda Expressions
Lambda expressions are usually passed as parameters to a function:
Example
Use a lambda expression in theArrayList
'sforEach()
method to printevery item in the list:
import java.util.ArrayList;public class Main { public static void main(String[] args) { ArrayList<Integer> numbers = new ArrayList<Integer>(); 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 whichhas only one method. The lambda expression should have the same number ofparameters and the same return type as that method. Java has many of these kinds ofinterfaces built in, such as theConsumer
interface (found in thejava.util
package) used by lists.
Example
Use Java'sConsumer
interface to store a lambda expression in a variable:
import java.util.ArrayList;import java.util.function.Consumer;public class Main { public static void main(String[] args) { ArrayList<Integer> numbers = new ArrayList<Integer>(); numbers.add(5); numbers.add(9); numbers.add(8); numbers.add(1); Consumer<Integer> method = (n) -> { System.out.println(n); }; numbers.forEach( method ); }}
To use a lambda expression in a method, the method should have a parameter with asingle-method interface as its type. Calling the interface's method will run the lambdaexpression:
Example
Create a method which takes a lambda expression as a parameter:
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);
}}