Java Lambda-expressies
Java Lambda-expressies
Lambda-expressies zijn toegevoegd in Java 8.
Een lambda-expressie is een kort codeblok dat parameters opneemt en een waarde retourneert. Lambda-expressies zijn vergelijkbaar met methoden, maar ze hebben geen naam nodig en ze kunnen rechtstreeks in de hoofdtekst van een methode worden geïmplementeerd.
Syntaxis
De eenvoudigste lambda-expressie bevat een enkele parameter en een expressie:
parameter -> expression
Als u meer dan één parameter wilt gebruiken, plaatst u deze tussen haakjes:
(parameter1, parameter2) -> expression
Uitdrukkingen zijn beperkt. Ze moeten onmiddellijk een waarde retourneren en mogen geen variabelen, toewijzingen of instructies zoals if
of bevatten for
. Om complexere bewerkingen uit te voeren, kan een codeblok worden gebruikt met accolades. Als de lambda-expressie een waarde moet retourneren, moet het codeblok een return
instructie hebben.
(parameter1, parameter2) -> { code block }
Lambda-expressies gebruiken
Lambda-expressies worden meestal als parameters aan een functie doorgegeven:
Voorbeeld
Gebruik een lamba-expressie in de methode ArrayList
's forEach()
om elk item in de lijst af te drukken:
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-expressies kunnen in variabelen worden opgeslagen als het type van de variabele een interface is die slechts één methode heeft. De lambda-expressie moet hetzelfde aantal parameters en hetzelfde retourtype hebben als die methode. Java heeft veel van dit soort interfaces ingebouwd, zoals de Consumer
interface (te vinden in het java.util
pakket) die door lijsten wordt gebruikt.
Voorbeeld
Gebruik de Java- Consumer
interface om een lambda-expressie in een variabele op te slaan:
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 );
}
}
Om een lambda-expressie in een methode te gebruiken, moet de methode een parameter hebben met een enkelvoudige methode-interface als type. Door de methode van de interface aan te roepen, wordt de lambda-expressie uitgevoerd:
Voorbeeld
Maak een methode die een lambda-expressie als parameter neemt:
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);
}}