Java Lambda Uitdrukkings


Java Lambda Uitdrukkings

Lambda-uitdrukkings is in Java 8 bygevoeg.

'n Lambda-uitdrukking is 'n kort blok kode wat parameters inneem en 'n waarde terugstuur. Lambda-uitdrukkings is soortgelyk aan metodes, maar hulle het nie 'n naam nodig nie en hulle kan reg in die liggaam van 'n metode geïmplementeer word.


Sintaksis

Die eenvoudigste lambda-uitdrukking bevat 'n enkele parameter en 'n uitdrukking:

parameter -> expression

Om meer as een parameter te gebruik, draai dit tussen hakies:

(parameter1, parameter2) -> expression

Uitdrukkings is beperk. Hulle moet onmiddellik 'n waarde terugstuur, en hulle kan nie veranderlikes, opdragte of stellings soos ifof bevat nie for. Om meer komplekse bewerkings te doen, kan 'n kodeblok met krulhakies gebruik word. As die lambda-uitdrukking 'n waarde moet terugstuur, moet die kodeblok 'n returnstelling hê.

(parameter1, parameter2) -> { code block }

Gebruik Lambda-uitdrukkings

Lambda-uitdrukkings word gewoonlik as parameters na 'n funksie oorgedra:

Voorbeeld

Gebruik 'n lamba-uitdrukking in die ArrayListse forEach()metode om elke item in die lys te druk:

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-uitdrukkings kan in veranderlikes gestoor word as die veranderlike se tipe 'n koppelvlak is wat slegs een metode het. Die lambda-uitdrukking moet dieselfde aantal parameters en dieselfde tipe terugkeer as daardie metode hê. Java het baie van hierdie soort koppelvlakke ingebou, soos die Consumerkoppelvlak (gevind in die java.utilpakket) wat deur lyste gebruik word.

Voorbeeld

Gebruik Java se Consumerkoppelvlak om 'n lambda-uitdrukking in 'n veranderlike te stoor:

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 'n lambda-uitdrukking in 'n metode te gebruik, moet die metode 'n parameter hê met 'n enkelmetode-koppelvlak as sy tipe. Deur die koppelvlak se metode te roep, sal die lambda-uitdrukking uitgevoer word:

Voorbeeld

Skep 'n metode wat 'n lambda-uitdrukking as 'n parameter neem:

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);
  }
}