Middle
119
questionbank
Какие конечные методы работы со стримами вы знаете?
Ответ от нейросети
sobes.tech AI
Конечные методы стримов Java потребляют элементы стрима и производят результат:
forEach(Consumer<? super T> action): Выполняет действие для каждого элемента в стриме. Возвращаетvoid.// Пример: распечатка каждого элемента Stream.of("a", "b", "c").forEach(System.out::println);forEachOrdered(Consumer<? super T> action): Выполняет действие для каждого элемента в стриме в заданном порядке.// Пример: распечатка в заданном порядке Stream.of("c", "b", "a").parallel().forEachOrdered(System.out::println);toArray(): Собирает элементы стрима в массивObject[].// Пример: сбор в массив Object строк Object[] arr = Stream.of("a", "b").toArray();toArray(IntFunction<A[]> generator): Собирает элементы стрима в массив указанного типа.// Пример: сбор в массив String String[] arr = Stream.of("a", "b").toArray(String[]::new);reduce(BinaryOperator<T> accumulator): Объединяет элементы стрима с помощью функции-аккумулятора. ВозвращаетOptional<T>.// Пример: суммирование чисел Optional<Integer> sum = Stream.of(1, 2, 3).reduce(Integer::sum);reduce(T identity, BinaryOperator<T> accumulator): Объединяет со стартовым значением.// Пример: суммирование со стартом 10 Integer sum = Stream.of(1, 2, 3).reduce(10, Integer::sum);reduce(U identity, BiFunction<U, ? super T, U> accumulator, BinaryOperator<U> combiner): Для параллельных стримов.// Пример: суммирование параллельно Integer sum = Stream.of(1, 2, 3).parallel().reduce(0, Integer::sum, Integer::sum);collect(Supplier<R> supplier, BiConsumer<R, ? super T> accumulator, BiConsumer<R, R> combiner): Мутирующее свертывание.// Пример: сбор в список List<String> list = Stream.of("a", "b").collect(ArrayList::new, ArrayList::add, ArrayList::addAll);collect(Collector<? super T, A, R> collector): Свертывание с помощьюCollector.// Пример: сбор в список с использованием Collectors List<String> list = Stream.of("a", "b").collect(Collectors.toList());min(Comparator<? super T> comparator): Находит минимальный элемент. ВозвращаетOptional<T>.// Пример: поиск минимального числа Optional<Integer> min = Stream.of(3, 1, 2).min(Integer::compareTo);max(Comparator<? super T> comparator): Находит максимальный элемент. ВозвращаетOptional<T>.// Пример: поиск максимального числа Optional<Integer> max = Stream.of(3, 1, 2).max(Integer::compareTo);count(): Возвращает количество элементов в стриме. Возвращаетlong.// Пример: подсчет элементов long count = Stream.of(1, 2, 3).count();anyMatch(Predicate<? super T> predicate): Проверяет, соответствует ли хоть один элемент предикату. Возвращаетboolean.// Пример: проверка наличия четного числа boolean hasEven = Stream.of(1, 2, 3).anyMatch(n -> n % 2 == 0);allMatch(Predicate<? super T> predicate): Проверяет, соответствуют ли все элементы предикату. Возвращаетboolean.// Пример: проверка, что все числа четные boolean allEven = Stream.of(2, 4, 6).allMatch(n -> n % 2 == 0);noneMatch(Predicate<? super T> predicate): Проверяет, не соответствует ли ни один элемент предикату. Возвращаетboolean.// Пример: проверка отсутствия отрицательных чисел boolean noneNegative = Stream.of(1, 2, 3).noneMatch(n -> n < 0);findFirst(): Находит первый элемент в стриме. ВозвращаетOptional<T>.// Пример: поиск первого элемента Optional<String> first = Stream.of("a", "b").findFirst();findAny(): Находит любой элемент в стриме (особенно полезно для параллельных стримов). ВозвращаетOptional<T>.// Пример: поиск любого элемента (в параллельном стриме может быть не первым) Optional<String> any = Stream.of("a", "b").parallel().findAny();
Интерфейсы IntStream, LongStream, DoubleStream имеют свои специализированные конечные операции, такие как sum(), average(), summaryStatistics().
// Пример: суммирование int стрима
int sum = IntStream.of(1, 2, 3).sum();
// Пример: расчет среднего long стрима
OptionalDouble average = LongStream.of(1, 2, 3).average();
// Пример: статистика double стрима
DoubleSummaryStatistics stats = DoubleStream.of(1.0, 2.0, 3.0).summaryStatistics();