Mis on lambdaavaldised Java-s ja milliseid võimalusi need pakuvad?
sobes.tech AI
Vastus AI-lt
Lambdaväljendid Java on lühike süntaks anonüümsete funktsioonide (nimeta meetodite) loomiseks, mida saab edasi anda argumentidena või salvestada muutujatesse. Põhimõtteliselt on need "elus" realiseeritud funktsionaalsed liidesed.
Peamised võimalused, mida lambdaväljendid pakuvad:
-
Süntaksi lihtsustamine: Oluliselt lühendavad boilerplate-koodi, töötades funktsionaalsete liideste with, võrreldes anonüümsete sisemiste klassidega.
// Enne lambda: Runnable classicRunnable = new Runnable() { @Override public void run() { System.out.println("Klassikaline Runnable"); } }; // Lambda-ga: Runnable lambdaRunnable = () -> System.out.println("Lambda Runnable"); -
Funktsionaalne programmeerimine: Võimaldavad kirjutada rohkem funktsionaalset koodi, kus funktsioonid on esimese klassi kodanikud ja neid saab edastada andmetena. See on oluline Stream API-ga töötamisel.
// Filtreerimine lambda abil List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); List<String> filteredNames = names.stream() .filter(name -> name.startsWith("A")) .collect(Collectors.toList()); -
Töö Stream API-ga: Lambdaväljendid on aluseks enamikule Stream API operatsioonidele (filter, map, forEach, reduce jne), pakkudes lühemust ja paralleelset täitmist.
// Elementide teisendamine ja väljatrükk List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); numbers.stream() .map(n -> n * n) // lambda map-ile .forEach(System.out::println); // meetodi viide (lambda alternatiiv) -
Paranenud loetavus: Lihtsate operatsioonide jaoks muudab lambda koodi selgemaks ja arusaadavamaks, keskendudes operatsiooni enda rõhutamisele, mitte anonüümse klassi süntaksile.
-
Funktsionaalsete liideste rakendamine: Neid saab kasutada igal pool, kus oodatakse funktsionaalset liidest (liides ühe abstraktse meetodiga).
Lambda väljendi süntaks: (parameetrid) -> { keha }
Näited:
- Ilma parameetriteta, ilma tagastusarvuta:
() -> System.out.println("Hello") - Ühe parameetriga, ilma tagastusarvuta:
name -> System.out.println("Hello, " + name)(võib jätta sulgude ümber ühe parameetri) - Mitme parameetriga, ilma tagastusarvuta:
(x, y) -> System.out.println(x + y) - Parameetritega, tagastusarvuga:
(a, b) -> a + b(kui keha koosneb ühest väljendusest, tagastatakse selle väärtus automaatselt) - Parameetritega, plokiga ja tagastusarvuga:
(a, b) -> { int sum = a + b; return sum; }(selgereturnon vajalik plokkidele)