Какие знаешь терминальные методы в Stream API
1️⃣ Как кратко ответить
Терминальные методы в Stream API включают forEach(), collect(), reduce(), count(), findFirst(), findAny(), allMatch(), anyMatch(), noneMatch(), toArray(), min(), и max(). Эти методы завершают обработку потока и возвращают результат.
2️⃣ Подробное объяснение темы
В Java Stream API терминальные методы играют ключевую роль, так как они завершают цепочку операций над потоком и возвращают результат. Без вызова терминального метода никакие промежуточные операции не будут выполнены. Давайте рассмотрим основные терминальные методы и их применение.
-
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)): Для каждого элемента потока выполняется действие — вывод имени на консоль.
-
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()): Собирает элементы потока в список.
-
reduce(): Сводит элементы потока к одному значению, используя бинарную операцию.
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); int sum = numbers.stream().reduce(0, Integer::sum);reduce(0, Integer::sum): Начинает с 0 и суммирует все элементы потока.
-
count(): Возвращает количество элементов в потоке.
long count = names.stream().count();count(): Возвращает количество элементов в потоке.
-
findFirst(): Возвращает первый элемент потока, если он существует.
Optional<String> first = names.stream().findFirst();findFirst(): Возвращает первый элемент потока, обернутый вOptional.
-
findAny(): Возвращает любой элемент потока, полезно в параллельных потоках.
Optional<String> any = names.stream().findAny();findAny(): Возвращает любой элемент потока, обернутый вOptional.
-
allMatch(): Проверяет, соответствуют ли все элементы потока заданному предикату.
boolean allStartWithA = names.stream().allMatch(name -> name.startsWith("A"));allMatch(name -> name.startsWith("A")): Проверяет, начинаются ли все имена с "A".
-
anyMatch(): Проверяет, соответствует ли хотя бы один элемент потока заданному предикату.
boolean anyStartWithA = names.stream().anyMatch(name -> name.startsWith("A"));anyMatch(name -> name.startsWith("A")): Проверяет, начинается ли хотя бы одно имя с "A".
-
noneMatch(): Проверяет, не соответствует ли ни один элемент потока заданному предикату.
boolean noneStartWithZ = names.stream().noneMatch(name -> name.startsWith("Z"));noneMatch(name -> name.startsWith("Z")): Проверяет, не начинается ли ни одно имя с "Z".
-
toArray(): Преобразует элементы потока в массив.
String[] namesArray = names.stream().toArray(String[]::new);toArray(String[]::new): Преобразует поток в массив строк.
-
min() и max(): Возвращают минимальный или максимальный элемент потока на основе заданного компаратора.
Optional<String> shortestName = names.stream().min(Comparator.comparingInt(String::length));min(Comparator.comparingInt(String::length)): Находит самое короткое имя в потоке.
Терминальные методы необходимы для получения результата из потока, будь то коллекция, массив, одиночное значение или просто выполнение действия для каждого элемента. Они завершают цепочку операций и инициируют выполнение всех промежуточных операций, которые были определены до них.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться