Skip to content

Expresii Lambda în Java — Sintaxă și Functional Interfaces

DodaTech Updated 2025-01-15 2 min read

In this tutorial, you'll learn about Expresii Lambda în Java. We cover key concepts, practical examples, and best practices.

Expresiile lambda sunt funcții anonime introduse în Java 8 care permit scrierea de cod funcțional concis, înlocuind clasele anonime verbose și lucrând împreună cu interféțele funcționale (interfețe cu o singură metodă abstractă).

The Problem

Clasele anonime în Java sunt verbose și greu de citit. Acest quick-fix îți arată cum să folosești expresii lambda pentru a scrie cod mai scurt și mai expresiv.

The Wrong Way

button.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("Clicked!");
    }
});

Output:

Clicked!  // dar codul e mult prea verbose

The Right Way

button.addActionListener(e -> System.out.println("Clicked!"));

Output:

Clicked!

Step-by-Step Fix

1. Identifică o interfață funcțională

O interfață cu o singură metodă abstractă (SAM — Single Abstract Method):

@FunctionalInterface
interface Calculator {
    int calculate(int a, int b);
}

2. Înlocuiește clasa anonimă cu lambda

// Clasă anonimă
Calculator add = new Calculator() {
    @Override
    public int calculate(int a, int b) { return a + b; }
};

// Lambda
Calculator add = (a, b) -> a + b;

3. Variante de sintaxă

x -> x * 2                          // un parametru, fără paranteze
(a, b) -> a + b                     // doi parametri
() -> Math.random()                 // fără parametri
(String s) -> s.length()            // tip explicit
(int a, int b) -> { return a + b; } // corp cu acolade

Prevention Tips

  • Adnotarea @FunctionalInterface asigură că interfața rămâne funcțională
  • Folosește method references (String::length) când lambda doar apelează o metodă
  • Nu scrie lambde prea lungi — extrage-le în metode numite
  • Preferă interfețele funcționale standard (Predicate, Function, Consumer) în loc să creezi altele noi

Common Mistakes

  1. Paranteze lipsă la zero parametri() -> expr e corect, -> expr nu.
  2. Confuzia între Consumer și FunctionConsumer primește un parametru și returnează void, Function returnează o valoare.
  3. Mutation de variabile externe — variabilele capturate trebuie să fie effectively final.

FAQ

### Ce este o expresie lambda în Java?

O funcție anonimă care poate fi tratată ca o instanță a unei interfețe funcționale. Sintaxa: (parametri) -> expresie.

Ce este @FunctionalInterface?

O adnotare care marchează o interfață ca având o singură metodă abstractă. Compilatorul va da eroare dacă interfața are mai multe metode abstracte.

Ce sunt method references?

O notație concisă pentru lambde care apelează o metodă existentă: String::length e echivalent cu s -> s.length().

Construit de dezvoltatorii Doda Browser, DodaZIP și Durga Antivirus Pro. Instrumentele DodaTech se integrează perfect cu Java pentru productivitate și securitate sporite.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro