Middle+
88
questionbank
Что такое метод рекурсия в Stream?
Ответ от нейросети
sobes.tech AI
// Рекурсия в Stream API напрямую не поддерживается.
// Метод называется reduce.
Метод reduce в Stream API выполняет свертку элементов потока в одно результирующее значение, применяя бинарную операцию.
Существует три перегрузки метода reduce:
-
Optional<T> reduce(BinaryOperator<T> accumulator): Применяет оператор свертки к элементам потока, возвращаяOptional<T>. Используется, когда нет начального значения. -
T reduce(T identity, BinaryOperator<T> accumulator): Применяет оператор свертки, начиная с заданного начального значения (identity). Возвращает результирующее значение типаT. -
<U> U reduce(U identity, BiFunction<U, ? super T, U> accumulator, BinaryOperator<U> combiner): Наиболее общая форма, подходит для параллельных потоков.identity: Начальное значение аккумулятора.accumulator: Объединяет элемент потока с аккумулятором.combiner: Объединяет результаты параллельных вычислений.
Пример использования:
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
public class StreamReduceExample {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
// Пример 1: Сумма элементов без начального значения
Optional<Integer> sumOptional = numbers.stream()
.reduce((a, b) -> a + b);
sumOptional.ifPresent(sum -> System.out.println("Сумма (Optional): " + sum));
// Пример 2: Сумма элементов с начальным значением
int sumWithIdentity = numbers.stream()
.reduce(0, (a, b) -> a + b);
System.out.println("Сумма (с identity): " + sumWithIdentity);
// Пример 3: Конкатенация строк с параллельным потоком
List<String> words = Arrays.asList("Hello", " ", "World", "!");
String combinedString = words.parallelStream()
.reduce("", // identity
(a, b) -> a + b, // accumulator
(a, b) -> a + b); // combiner
System.out.println("Объединенная строка: " + combinedString);
}
}