Метод reduce() в Java Stream API используется для выполнения операции свертки (reduction), которая объединяет элементы потока в одно значение, применяя заданную бинарную операцию. Этот метод полезен для выполнения таких операций, как суммирование, нахождение максимума или минимума, умножение и т.д.
Основны метода reduce()
- Синтаксис:
T reduce(T identity, BinaryOperator<T> accumulator);
Optional<T> reduce(BinaryOperator<T> accumulator);
T reduce(T identity, BinaryOperator<T> accumulator, BinaryOperator<T> combiner);
- Параметры:
- identity: начальное значение, которое используется в качестве стартовой точки для свертки. Если поток пуст, это значение возвращается как результат.
- accumulator: функция, которая принимает два параметра: частичный результат и текущий элемент потока, и возвращает новый частичный результат.
- combiner: используется в параллельных потоках для объединения результатов из разных под-потоков.
- Возвращаемое значение:
- Может быть значением типа T или Optional<T>, в зависимости от того, указан ли начальный элемент (identity).
Примеры использования
- Суммирование чисел:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream().reduce(0, Integer::sum);
System.out.println(sum); // Output: 15
- Нахождение максимального значения:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int max = numbers.stream().reduce(Integer.MIN_VALUE, Integer::max);
System.out.println(max); // Output: 5
- Объединение строк:
List<String> words = Arrays.asList(“Hello”, “World”);
String combined = words.stream().reduce(“”, (a, b) -> a + ” ” + b);
System.out.println(combined.trim()); // Output: Hello World
Заключение
Метод reduce()
позволяет выполнять свертку элементов потока в одно значение, применяя заданную бинарную операцию, что полезно для таких задач, как суммирование, нахождение максимума или объединение строк.