← Назад ко всем вопросам

Какие знаешь терминальные методы в Stream API

1️⃣ Как кратко ответить

Терминальные методы в Stream API включают forEach(), collect(), reduce(), count(), findFirst(), findAny(), allMatch(), anyMatch(), noneMatch(), toArray(), min(), и max(). Эти методы завершают обработку потока и возвращают результат.

2️⃣ Подробное объяснение темы

В Java Stream API терминальные методы играют ключевую роль, так как они завершают цепочку операций над потоком и возвращают результат. Без вызова терминального метода никакие промежуточные операции не будут выполнены. Давайте рассмотрим основные терминальные методы и их применение.

  1. forEach(): Этот метод используется для выполнения действия для каждого элемента потока. Он не возвращает никакого значения.

    List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
    names.stream().forEach(name -> System.out.println(name));
    
    • names.stream(): Создает поток из списка имен.
    • forEach(name -> System.out.println(name)): Для каждого элемента потока выполняется действие — вывод имени на консоль.
  2. collect(): Преобразует элементы потока в другую форму, например, в коллекцию.

    List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
    List<String> upperCaseNames = names.stream()
                                       .map(String::toUpperCase)
                                       .collect(Collectors.toList());
    
    • map(String::toUpperCase): Преобразует каждое имя в верхний регистр.
    • collect(Collectors.toList()): Собирает элементы потока в список.
  3. reduce(): Сводит элементы потока к одному значению, используя бинарную операцию.

    List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
    int sum = numbers.stream().reduce(0, Integer::sum);
    
    • reduce(0, Integer::sum): Начинает с 0 и суммирует все элементы потока.
  4. count(): Возвращает количество элементов в потоке.

    long count = names.stream().count();
    
    • count(): Возвращает количество элементов в потоке.
  5. findFirst(): Возвращает первый элемент потока, если он существует.

    Optional<String> first = names.stream().findFirst();
    
    • findFirst(): Возвращает первый элемент потока, обернутый в Optional.
  6. findAny(): Возвращает любой элемент потока, полезно в параллельных потоках.

    Optional<String> any = names.stream().findAny();
    
    • findAny(): Возвращает любой элемент потока, обернутый в Optional.
  7. allMatch(): Проверяет, соответствуют ли все элементы потока заданному предикату.

    boolean allStartWithA = names.stream().allMatch(name -> name.startsWith("A"));
    
    • allMatch(name -> name.startsWith("A")): Проверяет, начинаются ли все имена с "A".
  8. anyMatch(): Проверяет, соответствует ли хотя бы один элемент потока заданному предикату.

    boolean anyStartWithA = names.stream().anyMatch(name -> name.startsWith("A"));
    
    • anyMatch(name -> name.startsWith("A")): Проверяет, начинается ли хотя бы одно имя с "A".
  9. noneMatch(): Проверяет, не соответствует ли ни один элемент потока заданному предикату.

    boolean noneStartWithZ = names.stream().noneMatch(name -> name.startsWith("Z"));
    
    • noneMatch(name -> name.startsWith("Z")): Проверяет, не начинается ли ни одно имя с "Z".
  10. toArray(): Преобразует элементы потока в массив.

    String[] namesArray = names.stream().toArray(String[]::new);
    
    • toArray(String[]::new): Преобразует поток в массив строк.
  11. min() и max(): Возвращают минимальный или максимальный элемент потока на основе заданного компаратора.

    Optional<String> shortestName = names.stream().min(Comparator.comparingInt(String::length));
    
    • min(Comparator.comparingInt(String::length)): Находит самое короткое имя в потоке.

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

Тема: Stream API
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки