Приведите примеры методов для каждого типа операций Stream API в Java.

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

Ответ

Stream API в Java предоставляет несколько типов операций. Вот ключевые примеры:

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

  • filter(Predicate<T>) — фильтрация по условию.
    List<Integer> evens = Stream.of(1, 2, 3, 4)
        .filter(n -> n % 2 == 0)
        .collect(Collectors.toList()); // [2, 4]
  • map(Function<T, R>) — преобразование каждого элемента.
    List<Integer> lengths = Stream.of("Java", "Stream")
        .map(String::length)
        .collect(Collectors.toList()); // [4, 6]
  • sorted() / sorted(Comparator<T>) — сортировка.
    List<String> sorted = Stream.of("Beta", "Alpha")
        .sorted()
        .collect(Collectors.toList()); // ["Alpha", "Beta"]
  • distinct() — удаление дубликатов.
  • limit(long n) — ограничение количества элементов.

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

  • reduce(BinaryOperator<T>) — свертка элементов в одно значение.
    Optional<Integer> sum = Stream.of(1, 2, 3)
        .reduce(Integer::sum); // Optional[6]
  • collect(Collector) — сбор элементов в коллекцию или другую структуру.
  • forEach(Consumer<T>) — выполнение действия для каждого элемента.
  • count() — подсчет количества элементов.

Важно: Промежуточные операции «ленивы» и выполняются только при вызове терминальной операции.