Sobes.tech
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:

  1. 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();  
    
  2. 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"));  
    
  3. 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)  
    
  4. 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.
  5. 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.