Middle
Mi a lambda kifejezések Java-ban, és milyen lehetőségeket kínálnak?
sobes.tech MI
Válasz az MI-től
A Java lambda kifejezés egy névtelen függvény, amely nem tartozik semmilyen osztályhoz, és objektumként átadható.
Szintaxis: (paraméterek) -> { törzs }
Lehetőségek:
- Funkcionális interfész: A lambda kifejezés hozzárendelhető egy funkcionális interfész típusú változóhoz (egy absztrakt metódussal rendelkező interfészhez).
// Funkcionális interfész @FunctionalInterface interface MyInterface { void myMethod(); } // Lambda kifejezés használata MyInterface lambda = () -> System.out.println("Helló a lambda-ból!"); lambda.myMethod(); - Kód egyszerűsítése: Helyettesítik az anonim belső osztályokat a funkcionális interfészek implementálásához.
// Java 8 előtt (anonim osztály) Thread thread1 = new Thread(new Runnable() { @Override public void run() { System.out.println("Régi mód"); } }); // Java 8-tól (lambda) Thread thread2 = new Thread(() -> System.out.println("Lambda mód")); - Használat a Stream API-ban: A Stream API-vel integrálva végrehajt műveleteket gyűjteményeken.
List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); names.stream() .filter(name -> name.startsWith("A")) // Lambda kifejezés .forEach(System.out::println); // Metódus referencia (lambda kifejezés) - Elhalasztott végrehajtás: A lambda kifejezés belsejében lévő kód csak akkor fut le, amikor a funkcionális metódust meghívják.
- Változók hatóköre: A lambda kifejezések képesek elfogni külső környezetből változókat (a helyi változóknak final vagy effektíve finalnak kell lenniük).
| Előny | Leírás |
|---|---|
| Kód rövidség | Csökkenti a "szólamosságot" az anonim osztályokhoz képest. |
| Olvashatóság javítása | A kód tömörebbé és érthetőbbé válik. |
| Párhuzamos feldolgozás | Támogatott a Stream API által párhuzamos műveletekhez. |