Какие методы Stream API в Java используются наиболее часто?

«Какие методы Stream API в Java используются наиболее часто?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Базовый паттерн работы со Stream API часто включает цепочку: filter() -> map() -> collect().

Типичный пример:

List<String> names = List.of("Alice", "Bob", "Charlie", "Anna");

List<String> result = names.stream()          // Источник
        .filter(name -> name.length() > 3)    // Промежуточная операция: фильтрация
        .map(String::toUpperCase)             // Промежуточная операция: преобразование
        .sorted()                             // Промежуточная операция: сортировка (опционально)
        .collect(Collectors.toList());        // Терминальная операция: сбор в коллекцию
// Результат: ["ALICE", "CHARLIE", "ANNA"]

Назначение ключевых методов:

  • filter(Predicate<T>): Отбирает элементы, удовлетворяющие условию. Основа для выборки данных.
  • map(Function<T, R>): Преобразует каждый элемент в другой объект. Ключевой метод для трансформации данных.
  • collect(Collector): Завершает поток, собирая элементы в коллекцию (List, Set, Map) или сводя к одному значению. Без терминальной операции поток не выполнится.

Другие часто используемые методы:

  • sorted() / sorted(Comparator): Сортировка.
  • distinct(): Удаление дубликатов.
  • forEach(Consumer): Выполнение действия для каждого элемента (часто для сайд-эффектов).
  • findFirst() / findAny(): Поиск элемента.
  • flatMap(Function<T, Stream<R>>): "Разворачивает" вложенные структуры (например, Stream<List> в Stream).