Sobes.tech
Junior

Vorbește despre expresiile lambda și metodele de referință în contextul programării Java și aplicarea lor în dezvoltarea Android.

sobes.tech AI

Răspuns de la AI

Expresiile lambda sunt o notație concisă pentru crearea funcțiilor anonime. Permite transmiterea funcționalității ca argument al unei metode sau crearea unei funcții fără a-i specifica numele. Sintaxă: (parametri) -> { corp }. Sunt utilizate pentru implementarea interfețelor cu o singură metodă abstractă (interfețe funcționale).

Aplicare în Android:

  • Handleri de evenimente (clicuri, evenimente tactile).
  • Implementarea interfețelor de ascultători (de exemplu, OnClickListener, OnCompleteListener).
  • Lucru cu API-ul Stream pentru procesarea colecțiilor (filtrare, transformare).
// Înainte de Java 8
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Toast.makeText(context, "Apăsat!", Toast.LENGTH_SHORT).show();
    }
});

// Cu expresie lambda
button.setOnClickListener(v -> {
    Toast.makeText(context, "Apăsat!", Toast.LENGTH_SHORT).show();
});

Metodele de referință sunt o modalitate mai compactă de a face referire la metode sau constructori existenți fără a-i executa. Sunt folosite pentru a înlocui expresiile lambda care doar apelează o metodă.

Tipuri de metode de referință:

  • Referință la metodă statică: Clasă::numeMetodăStatica
  • Referință la metodă de instanță a unui obiect: obiect::numeMetodă
  • Referință la metodă de instanță a unui tip arbitrar: Tip::numeMetodă
  • Referință la constructor: Clasă::new

Aplicare în Android:

  • Reducerea expresiilor lambda când se lucrează cu ascultători.
  • În API-ul Stream pentru aplicarea metodelor asupra elementelor stream-ului.
// Lambda
List<String> nume = Arrays.asList("Alice", "Bob");
nume.forEach(n -> System.out.println(n));

// Referință la metodă
nume.forEach(System.out::println);

Avantaje:

  • Îmbunătățirea lizibilității codului, mai ales în cazul operațiilor simple.
  • Cod mai compact.
  • Utilizarea în API-ul Stream face procesarea colecțiilor mai funcțională și eficientă.