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 ifof 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 returninstructie 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 Consumerinterface (te vinden in het java.utilpakket) die door lijsten wordt gebruikt.

Voorbeeld

Gebruik de Java- Consumerinterface 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);
  }
}