Sobes.tech
Junior

Какви са лямбда изразите в Java?

sobes.tech AI

Отговор от AI

Ламбда изразът е кратка форма за анонимна функция, която реализира методите на функционален интерфейс.

Структура: (параметри) -> { тяло на израза }.

Част Описание Примери
параметри Списък с параметри, може да е празен. Типовете могат да не са посочени (се извеждат). ()<br>x<br>(x, y)<br>(int x, String y)
-> Оператор стрелка (arrow operator). Разделя параметрите и тялото. ->
тяло на израза Тялото на ламбда израза. Може да бъде израз или блок код. x * x<br>{ System.out.println(x); }

Примери за използване:

  • Реализация на функционални интерфейси:

    import java.util.function.Consumer;
    
    // Преди традиционната реализация с анонимен клас
    Consumer<String> consumerAnon = new Consumer<String>() {
        @Override
        public void accept(String s) {
            System.out.println(s);
        }
    };
    consumerAnon.accept("Традиционен анонимен клас");
    
    // С използване на ламбда израз
    Consumer<String> consumerLambda = s -> System.out.println(s);
    consumerLambda.accept("Ламбда израз");
    
  • Работа с API Streams:

    import java.util.Arrays;
    import java.util.List;
    import java.util.stream.Collectors;
    
    List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
    
    // Филтриране на четни числа с ламбда
    List<Integer> evenNumbers = numbers.stream()
                                      .filter(n -> n % 2 == 0)
                                      .collect(Collectors.toList());
    
    System.out.println(evenNumbers); // Изход: [2, 4]
    
    // Преобразуване на числата в техните квадрати
    List<Integer> squares = numbers.stream()
                                  .map(n -> n * n)
                                  .collect(Collectors.toList());
    
    System.out.println(squares); // Изход: [1, 4, 9, 16, 25]
    

Предимства:

  • Съкращаване на кода в сравнение с анонимните класове.
  • Повишаване на четимостта за прости операции.
  • Удобство при използване с API като Streams и други API, ориентирани към функционално програмиране.