Зарегистрируйтесь, чтобы продолжить обучение

Лямбды Java: Коллекции

Видео может быть заблокировано из-за расширений браузера. В статье вы найдете решение этой проблемы.

Лямбда-функции — это анонимные функции, которые можно сохранять и передавать как обычные переменные.

Введение

Общий вид лямбды (параметры) -> выражение или (параметры) -> {операторы;}. Стрелка — это лямбда-оператор.

Чаще всего используются три функциональных интерфейса:

  • Predicate - принимает параметр и возвращает логическое значение
  • Consumer - который принимает параметр и не возвращает никакого значения
  • Function - принимает параметр и возвращает какое-то значение
// Допустим, нам нужно вывести на экран
// список домашних животных и вернуть только имена питомцев,
// отсортированные по алфавиту

List<Map<String, String>> animals = List.of(
    Map.of("name", "Spooky", "animal", "dog"),
    Map.of("name", "Tom", "animal", "cat"),
    Map.of("name", "Jimmy", "animal", "bird"),
    Map.of("name", "Buddy", "animal", "dog"),
    Map.of("name", "Elsa", "animal", "dog"),
    Map.of("name", "Murka", "animal", "cat")
);
// Создадим метод getPetNames() в классе AppExample
// Для этого будем использовать Stream API и лямбды
class AppExample {
    public static List<String> getPetNames(List<Map<String, String>> animals, String animal) {
        return animals.stream()
            // Сначала отфильтруем всех питомцев, например только собак
            // Метод filter принимает в качестве параметра Predicate
            // Лямбда принимает вид питомца и возвращает true, если оно совпадает с требуемым
            .filter(pet -> pet.get("animal").equals(animal))
            // Затем сделаем отображение, оставим только имя питомца
            // Метод map принимает на вход Function
            // Она принимает текущий элемент стрима и возвращает новый измененный
            .map(pet -> pet.get("name"))
            // Сортируем имена
            // Метод sorted принимает на вход Function
            // Лямбда принимает два соседних элемента стрима и возвращает 1, 0 или -1
            // в зависимости от того, больше ли первый элемент чем второй, равен или меньше
            .sorted((name1, name2) -> name1.compareTo(name2))
            .collect(Collectors.toList());
    }
}
AppExample.getPetNames(animals, "dog"); // [Buddy, Elsa, Spooky]

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff