Ce sunt expresiile lambda în Java și ce posibilități oferă?
sobes.tech AI
Răspuns de la AI
Expresiile lambda în Java sunt o sintaxă concisă pentru crearea funcțiilor anonime (metode fără nume) care pot fi transmise ca argumente sau stocate în variabile. În esență, acestea sunt interfețe funcționale implementate "pe loc".
Principalele funcționalități oferite de expresiile lambda:
-
Simplificarea sintaxei: Reduc semnificativ codul boilerplate atunci când lucrez cu interfețe funcționale comparativ cu clasele interne anonime.
// Înainte de lambda: Runnable classicRunnable = new Runnable() { @Override public void run() { System.out.println("Runnable clasic"); } }; // Cu lambda: Runnable lambdaRunnable = () -> System.out.println("Runnable lambda"); -
Programare funcțională: Permite scrierea unui cod mai funcțional, unde funcțiile sunt cetățeni de primă clasă și pot fi transmise ca date. Acest lucru este esențial pentru lucrul cu API-ul Stream.
// Filtrarea unei liste folosind lambda List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); List<String> filteredNames = names.stream() .filter(name -> name.startsWith("A")) .collect(Collectors.toList()); -
Lucrul cu API-ul Stream: Expresiile lambda sunt fundamentul pentru majoritatea operațiilor din API-ul Stream (filter, map, forEach, reduce etc.), asigurând concizie și execuție paralelă.
// Transformarea și afișarea elementelor din stream List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); numbers.stream() .map(n -> n * n) // lambda pentru mapare .forEach(System.out::println); // referință la metodă (alternativă la lambda) -
Îmbunătățirea lizibilității: Pentru operații simple, lambdas fac codul mai ușor de citit și înțeles, concentrându-se pe operație în sine și nu pe sintaxa clasei anonime.
-
Implementarea interfețelor funcționale: Pot fi utilizate oriunde se așteaptă o instanță a unei interfețe funcționale (interfață cu o singură metodă abstractă).
Sintaxa expresiei lambda: (parametri) -> { corp }
Exemple:
- Fără parametri, fără valoare de returnare:
() -> System.out.println("Salut") - Cu un parametru, fără valoare de returnare:
name -> System.out.println("Salut, " + name)(pot fi omise parantezele în jurul unui singur parametru) - Cu mai mulți parametri, fără valoare de returnare:
(x, y) -> System.out.println(x + y) - Cu parametri, cu valoare de returnare:
(a, b) -> a + b(dacă corpul constă dintr-o singură expresie, valoarea sa este returnată implicit) - Cu parametri, cu bloc de cod și valoare de returnare:
(a, b) -> { int sum = a + b; return sum; }(return explicit este necesar pentru blocurile de cod)