Sobes.tech
Middle

Kas ir lambda izteiksmes Java un kādas iespējas tās sniedz?

sobes.tech AI

Atbilde no AI

Lambdās izteiksmes Java ir īss sintakses veids, lai izveidotu anonīmas funkcijas (bezvārda metodes), kuras var nodot kā argumentus vai saglabāt mainīgajos. Būtībā tās ir funkcionālie interfeisi, kuri tiek īstenoti "uz vietas".

Galvenās iespējas, ko nodrošina lambdās izteiksmes:

  • Sintakses vienkāršošana: Ļoti saīsina boilerplate kodu, strādājot ar funkcionālajiem interfeisiem, salīdzinot ar anonīmo iekšējo klasu izmantošanu.

    // Pirms lambdas:
    Runnable classicRunnable = new Runnable() {
        @Override
        public void run() {
            System.out.println("Klasiskais Runnable");
        }
    };
    
    // Ar lambda:
    Runnable lambdaRunnable = () -> System.out.println("Lambda Runnable");
    
  • Funkcionāla programmēšana: Atļauj rakstīt vairāk funkcionālu kodu, kur funkcijas ir pirmās klases pilsoņi un var tikt nodotas kā dati. Tas ir būtiski darbā ar Stream API.

    // Filtrēšana ar lambda
    List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
    List<String> filteredNames = names.stream()
                                     .filter(name -> name.startsWith("A"))
                                     .collect(Collectors.toList());
    
  • Darbs ar Stream API: Lambdās izteiksmes ir pamats lielākajai daļai operāciju Stream API (filter, map, forEach, reduce utt.), nodrošinot kodu īsāku un paralēli izpildāmu.

    // Elementu pārveidošana un izvadīšana
    List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
    numbers.stream()
           .map(n -> n * n) // lambda map funkcijai
           .forEach(System.out::println); // metodes atsauce (lambda alternatīva)
    
  • Uzlabota lasāmība: Vienkāršām operācijām lambdās kods kļūst skaidrāks un vieglāk saprotams, koncentrējoties uz pašu operāciju, nevis uz anonīmās klases sintaksi.

  • Funkcionālo interfeisu realizācija: Tos var izmantot jebkur, kur sagaidāms funkcionālais interfeiss (interfeiss ar vienu abstrakto metodi).

Lambdās izteiksmes sintakse: (parametri) -> { ķermenis }

Piemēri:

  • Bez parametriem, bez atgriešanas vērtības: () -> System.out.println("Hello")
  • Ar vienu parametru, bez atgriešanas vērtības: name -> System.out.println("Hello, " + name) (var izlaist iekavas ap vienu parametru)
  • Ar vairākiem parametriem, bez atgriešanas vērtības: (x, y) -> System.out.println(x + y)
  • Ar parametriem, ar atgriešanas vērtību: (a, b) -> a + b (ja ķermenis sastāv no viena izteiksmes, tā vērtība tiek automātiski atgriezta)
  • Ar parametriem, ar bloka kodu un atgriešanas vērtību: (a, b) -> { int sum = a + b; return sum; } (tieši return ir nepieciešams blokiem)