Sobes.tech
Middle
119
questionbank

Какие конечные методы работы со стримами вы знаете?

Ответ от нейросети

sobes.tech AI

Конечные методы стримов Java потребляют элементы стрима и производят результат:

  1. forEach(Consumer<? super T> action): Выполняет действие для каждого элемента в стриме. Возвращает void.
    // Пример: распечатка каждого элемента
    Stream.of("a", "b", "c").forEach(System.out::println);
    
  2. forEachOrdered(Consumer<? super T> action): Выполняет действие для каждого элемента в стриме в заданном порядке.
    // Пример: распечатка в заданном порядке
    Stream.of("c", "b", "a").parallel().forEachOrdered(System.out::println);
    
  3. toArray(): Собирает элементы стрима в массив Object[].
    // Пример: сбор в массив Object строк
    Object[] arr = Stream.of("a", "b").toArray();
    
  4. toArray(IntFunction<A[]> generator): Собирает элементы стрима в массив указанного типа.
    // Пример: сбор в массив String
    String[] arr = Stream.of("a", "b").toArray(String[]::new);
    
  5. reduce(BinaryOperator<T> accumulator): Объединяет элементы стрима с помощью функции-аккумулятора. Возвращает Optional<T>.
    // Пример: суммирование чисел
    Optional<Integer> sum = Stream.of(1, 2, 3).reduce(Integer::sum);
    
  6. reduce(T identity, BinaryOperator<T> accumulator): Объединяет со стартовым значением.
    // Пример: суммирование со стартом 10
    Integer sum = Stream.of(1, 2, 3).reduce(10, Integer::sum);
    
  7. 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);
    
  8. 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);
    
  9. collect(Collector<? super T, A, R> collector): Свертывание с помощью Collector.
    // Пример: сбор в список с использованием Collectors
    List<String> list = Stream.of("a", "b").collect(Collectors.toList());
    
  10. min(Comparator<? super T> comparator): Находит минимальный элемент. Возвращает Optional<T>.
    // Пример: поиск минимального числа
    Optional<Integer> min = Stream.of(3, 1, 2).min(Integer::compareTo);
    
  11. max(Comparator<? super T> comparator): Находит максимальный элемент. Возвращает Optional<T>.
    // Пример: поиск максимального числа
    Optional<Integer> max = Stream.of(3, 1, 2).max(Integer::compareTo);
    
  12. count(): Возвращает количество элементов в стриме. Возвращает long.
    // Пример: подсчет элементов
    long count = Stream.of(1, 2, 3).count();
    
  13. anyMatch(Predicate<? super T> predicate): Проверяет, соответствует ли хоть один элемент предикату. Возвращает boolean.
    // Пример: проверка наличия четного числа
    boolean hasEven = Stream.of(1, 2, 3).anyMatch(n -> n % 2 == 0);
    
  14. allMatch(Predicate<? super T> predicate): Проверяет, соответствуют ли все элементы предикату. Возвращает boolean.
    // Пример: проверка, что все числа четные
    boolean allEven = Stream.of(2, 4, 6).allMatch(n -> n % 2 == 0);
    
  15. noneMatch(Predicate<? super T> predicate): Проверяет, не соответствует ли ни один элемент предикату. Возвращает boolean.
    // Пример: проверка отсутствия отрицательных чисел
    boolean noneNegative = Stream.of(1, 2, 3).noneMatch(n -> n < 0);
    
  16. findFirst(): Находит первый элемент в стриме. Возвращает Optional<T>.
    // Пример: поиск первого элемента
    Optional<String> first = Stream.of("a", "b").findFirst();
    
  17. 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();