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:
- 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(); - 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")); - 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 - Hilinenud täitmine: Kood lambda-avaldises täidetakse ainult siis, kui kutsutakse funktsionaalset meetodit.
- 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. |