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

Отображение (map) Java: Стримы

Базовая операция в стримах это map() (отображение). Она берет исходный список и формирует на его основе другой, преобразуя каждый элемент по указанным правилам. Возьмем для примера задачу со списком чисел, которые нужно округлить. Как бы мы решили эту задачу без стримов:

var numbers = List.of(1.2, 2.5, 3.7, 4.4, 5.9);

// Список для хранения округленных чисел
var roundedNumbers = new ArrayList<>();

// Цикл для округления каждого числа и добавления его в новый список
for (var number : numbers) {
    var rounded = Math.round(number);
    roundedNumbers.add(rounded);
}

// Вывод округленных чисел
System.out.println(roundedNumbers); // Вывод: [1, 3, 4, 4, 6]

Отображение, позволяет скрыть процесс перебора и сфокусироваться на том что мы хотим получить. Выглядит это так:

var numbers = List.of(1.2, 2.5, 3.7, 4.4, 5.9);

// Применение стрима для округления чисел и сбора их в новый список
var roundedNumbers = numbers.stream()
                            .map(number -> Math.round(number))
                            // или проще через передачу ссылки
                            // .map(Math::round)
                            .toList();

// Вывод округленных чисел
System.out.println(roundedNumbers); // Вывод: [1, 3, 4, 4, 6]

Метод map() принимает как параметр лямбда-функцию, которая должна вернуть значение, вычисленное на базе переданного значения из исходной коллекции. Результатом может быть все что угодно. При этом отображение никогда не меняет размер коллекции, на выходе будет ровно то же, что было на входе.

Еще несколько примеров преобразований:

var solutions = List.of("hexlet", "chatgpt", "google", "youtube");

var result1 = solutions.stream()
                            .map(solution -> solution.toUpperCase())
                            // или
                            // .map(String::toUpperCase)
                            .toList();
// [HEXLET, CHATGPT, GOOGLE, YOUTUBE]

var result2 = solutions.stream()
                            .map(String::length)
                            // тоже самое что и
                            // .map(solution -> solution.length())
                            .toList();
// [6, 7, 6, 7]

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

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

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

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

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

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

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

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

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

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

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 25 000 ₸ в месяц
Разработка приложений на языке Java
10 месяцев
с нуля
Старт 21 ноября

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

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

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

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

Задавайте вопросы, если хотите обсудить теорию или упражнения. Команда поддержки Хекслета и опытные участники сообщества помогут найти ответы и решить задачу