Лямбда-выражения в Java

Лямбда-выражения в Java

Лямбда-выражения в Java

Доброго времени суток! Сегодня мы рассмотрим с Вами лямбда-выражения в языке Java.
Лямбда-выражения в Java сильно напоминают их аналоги — стрелочные функции из JavaScript, и служат для
оптимизации кода.

Основной синтаксис лямбда-выражений в Java следующий:



(параметры) -> инструкция

// или

(параметры) -> { инструкции; }



Объявление типа параметра необязательно — компилятор самостоятельно сможет вывести тип из значения параметра.
Для одного параметра круглые скобки можно не использовать , тогда как для нескольких параметров они обязательны.

Фигурные скобки необязательны, если в теле выражения есть только один оператор. Ключевое слово return также необязательно,
если тело содержит единственное выражение; фигурные скобки необходимы, чтобы указать, что выражение возвращает значение.

Пример:



package ru.example;



import java.util.Arrays;



public class LambdaJavaEx 

{



    public static void main(String[] args) {



        String[] words = { "это", "мой", "сайт", "и", "моя", "страница" };



        // сортируем массив, используя лямбда-выражение

        Arrays.sort(words, (String str1, String str2) -> (str1.compareTo(str2)));



        System.out.println(Arrays.toString(words));

    }

}



Популярное предназначение лямбда-выражений в Java — это замена функциональных интерфейсов их менее многословным аналогом.
Функциональный интерфейс в Java — это интерфейс с одним методом.

Пример:



package ru.example;



// функциональный интерфейс

interface CommandExecutor 

{

    void execute(String command);

}



public class CommandLambdaExecutor 

{

    public static void main(String[] args) 

    {



        // лямбда выражение совпадает с сигнатурой метода execute функционального интерфеса

        CommandExecutor executor = (String command) -> {

            System.out.println(msg);

        };



        executor.execute("java -v");

        executor.execute("jar file.jar");

    }

}



Общие функциональные интерфейсы

Ввиду того, что функциональный подход пользуется популярностью, то в Java уже есть реализации часто используемых функциональных интерфейсов,
таких как Function, Consumer, or Supplier.



package ru.example;



import java.util.function.Function;



public class LambdaExpressionFun

{



    public static void main(String[] args) {



        // лямбда-выражение, которое возводит число в куб

        // интерфейс Function описывает функцию, которая принимает на вход один параметр и возвращает некоторое значение

        Function<Integer, Integer> cube = (Integer x) -> x * x * x;



        // вызываем

        System.out.println(cube.apply(50));

    }

}



Фильтрация данных

Лямбда-выражения очень удобно использовать для различного рода фильтраций

Пример:



package ru.example;



import java.util.List;

import java.util.stream.Collectors;

import static java.lang.System.out;





// определим сущность продукта как запись (укороченная версия класса в Java 16)

record Product(String name, double price) {}





public class FilterProductLambdaEx 

{



    public static void main(String[] args) 

    {



        List<Product> products = List.of(

                new Product("iPhone 15", 1400.99),

                new Product("Samsung S12", 1200.99),

                new Product("Huawei 15", 1199.50),

                new Product("Samsung Galaxy Fold S10", 1999.99)

        );



        List<Product> result = products.stream()

                // фильтруем продукты, оставляя только те, которые включают в названии определенный брэнд и чья стоимость больше 1300

                .filter(product -> product.name().toLowerCase().contains("samsung") && product.price() > 1300)

                .toList();



        result.forEach(out::println);

    }

}





Таким образом, мы познакомились в данной статье с овновами лямбда-выражений в Java.

Источник

НЕТ КОММЕНТАРИЕВ

Оставить комментарий