Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Лямбды 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]

Дополнительные материалы

  1. Вебинар Stream API. Лямбда-выражения

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

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

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

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

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

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Java-разработчик
Профессия
с нуля
Разработка приложений на языке Java
2 февраля 10 месяцев

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»