Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Java: stream, api, functional programming

Что такое Java Stream API? Использовали ли вы его в проекте и для каких задач?

Вопрос проверяет понимание функционального программирования в Java и практическое применение Stream API.

Короткий ответ

Stream API - это функциональный подход к обработке коллекций данных в Java. Позволяет выполнять операции filter, map, reduce в декларативном стиле. Используется для обработки больших наборов данных, фильтрации, преобразования и агрегации. Часто применяется для замены традиционных циклов более выразительным кодом.

Длинный ответ

Java Stream API представляет мощный инструмент для обработки данных в функциональном стиле.

Основные концепции Stream API:

  1. Создание стримов:

    • Из коллекций: collection.stream()

    • Из массивов: Arrays.stream(array)

    • Из значений: Stream.of(1, 2, 3)

    • Бесконечные стримы: Stream.iterate(), Stream.generate()

  2. Промежуточные операции (lazy):

    • filter: Фильтрация элементов по условию

    • map: Преобразование каждого элемента

    • sorted: Сортировка элементов

    • distinct: Удаление дубликатов

    • limit/skip: Ограничение количества элементов

  3. Терминальные операции (eager):

    • collect: Преобразование в коллекцию

    • forEach: Выполнение действия для каждого элемента

    • reduce: Агрегация элементов

    • count: Подсчет элементов

    • anyMatch/allMatch/noneMatch: Проверка условий

Практические примеры использования:

// Фильтрация и преобразование
List<String> names = employees.stream()
    .filter(e -> e.getSalary() > 50000)
    .map(Employee::getName)
    .sorted()
    .collect(Collectors.toList());

// Группировка
Map<Department, List<Employee>> byDept = employees.stream()
    .collect(Collectors.groupingBy(Employee::getDepartment));

// Статистика
IntSummaryStatistics stats = employees.stream()
    .mapToInt(Employee::getSalary)
    .summaryStatistics();

// Параллельная обработка
List<String> results = largeList.parallelStream()
    .filter(item -> item.isValid())
    .map(item -> item.process())
    .collect(Collectors.toList());

Преимущества Stream API:

  • Выразительность: Более читаемый и компактный код

  • Функциональный стиль: Отсутствие side effects

  • Параллелизм: Упрощение параллельной обработки

  • Ленивые вычисления: Оптимизация производительности

Ограничения:

  • Одноразовость: стрим можно использовать только один раз

  • Сложность отладки по сравнению с традиционными циклами

  • Overhead для небольших коллекций

Вывод: Stream API особенно полезен для сложных операций над коллекциями, где важны выразительность и возможность параллельной обработки.

Уровень

  • Рейтинг:

    2

  • Сложность:

    7

Навыки

  • Java

    Java

Ключевые слова

#stream

#api

#functional programming

Подпишись на Java Developer в телеграм