Sobes.tech
Middle

Mis on lambda väljendid Java-s ja milliseid võimalusi need pakuvad?

sobes.tech AI

Vastus AI-lt

Java programmeerimisel on lambda-avaldis anonüümne funktsioon, mis ei kuulu ühegi klassi ja mida saab edastada objektina.

Süntaks: (parameetrid) -> { keha }

Võimalused:

  1. Funktsionaalne liides: Lambda-avaldis võib olla määratud funktsionaalsele liidesele (liides ühe abstraktse meetodiga).
    // Funktsionaalne liides  
    @FunctionalInterface  
    interface MyInterface {  
        void myMethod();  
    }  
    
    // Lambda-avaldiste kasutamine  
    MyInterface lambda = () -> System.out.println("Hello from lambda!");  
    lambda.myMethod();  
    
  2. Koodi lihtsustamine: Asendab anonüümseid sisemisi klasse, mis realiseerivad funktsionaalseid liideseid.
    // Enne Java 8 (anonüümne klass)  
    Thread thread1 = new Thread(new Runnable() {  
        @Override  
        public void run() {  
            System.out.println("Old way");  
        }  
    });  
    
    // Alates Java 8 (lambda)  
    Thread thread2 = new Thread(() -> System.out.println("Lambda way"));  
    
  3. Kasutamine Stream API-s: Integreerub Stream API-ga ja teostab operatsioone kogumite üle.
    List<String> names = Arrays.asList("Alice", "Bob", "Charlie");  
    names.stream()  
         .filter(name -> name.startsWith("A")) // Lambda-avaldis  
         .forEach(System.out::println);        // Meetodiviide  
    
  4. Hilinenud täitmine: Kood lambda-avaldises täidetakse ainult siis, kui kutsutakse funktsionaalset meetodit.
  5. Nähtavuspiirkonnad: Lambda-avaldised saavad haarata välise piirkonna muutujaid (kohalikel muutujaid peab olema final või efektiivselt final).
Eelis Kirjeldus
Koodi lühidus Vähendab "pikkust" võrreldes anonüümsete klassidega.
Loetavusparandused Muudab koodi kompaktsemaks ja arusaadavamaks.
Paralleelne töötlemine Toetab Stream API-d paralleelsete operatsioonide jaoks.