Метод
reduce в интерфейсе Stream используется для сведения набора элементов потока к одному результату, применяя заданную бинарную операцию (например, сложение, умножение). Этот метод часто используется для агрегации данных.Допустим, у нас есть список чисел, и мы хотим найти их сумму:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream()
.reduce(0, (a, b) -> a + b);
System.out.println(sum); // 15
В этом примере:
0 — начальное значение (identity),(a, b) -> a + b — бинарная операция, которая складывает два значения.reduce полезен для таких операций, как сумма, произведение, объединение строк и т.д.#java #Stream #reduce
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤1🔥1
Когда требуется конкатенировать строки с использованием
Stream, можно выбрать один из двух методов: Stream.reduce() или Stream.collect(Collectors.joining()).Пример с
Stream.reduce(): List<String> list = List.of("Str1", "Str2", "Str3");
String result = list.stream().reduce("", (a, b) -> a + b);
System.out.println(result); // Str1Str2Str3Пример с
Collectors.joining(): List<String> list = List.of("Str1", "Str2", "Str3");
String result = list.stream().collect(Collectors.joining());
System.out.println(result); // Str1Str2Str3Использование
reduce() для конкатенации строк не является оптимальным с точки зрения производительности. При каждом вызове операции +, создается новая строка, так как строки в Java неизменяемы. Это приводит к увеличению нагрузки на память из-за создания множества промежуточных объектов.В свою очередь, метод
Collectors.joining() использует StringBuilder для сборки строк, что значительно эффективнее. Он избегает создания лишних объектов и снижает потребление памяти.#java #Stream #reduce #joining
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤3🍾2🔥1
Stream.reduce()Метод
reduce() используется для агрегирования (свёртки) элементов стрима в одно значение. Это мощный инструмент для вычислений, таких как сумма, произведение, конкатенация строк и т. д.1️⃣
T reduce(T identity, BinaryOperator<T> accumulator)identity – начальное значение (например, 0 для суммы, 1 для произведения).accumulator – функция, которая объединяет элементы.✅ Пример: сумма чисел
List<Integer> numbers = List.of(1, 2, 3, 4, 5);
int sum = numbers.stream().reduce(0, Integer::sum);
System.out.println(sum); // 15
2️⃣
reduce(accumulator) (без начального значения)
Optional<T> reduce(BinaryOperator<T> accumulator)
📌 Здесь возвращается
Optional<T>, потому что стрим может быть пустым.✅ Пример: наибольшее число
Optional<Integer> max = numbers.stream().reduce(Integer::max);
max.ifPresent(System.out::println); // 5
3️⃣
reduce(identity, accumulator, combiner) (для параллельных потоков)
<U> U reduce(U identity, BiFunction<U, ? super T, U> accumulator, BinaryOperator<U> combiner)
✅ Пример: длина всех строк в списке
List<String> words = List.of("Java", "Stream", "Reduce");
int totalLength = words.parallelStream()
.reduce(0, (sum, word) -> sum + word.length(), Integer::sum);
System.out.println(totalLength); // 16
Здесь:
sum + word.length() – считает длину строк,Integer::sum – объединяет результаты.💡 Совет: Для простых случаев (сумма, максимум) используйте
sum(), max(), count(), а reduce() – для сложных операций.#java #reduce
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍18❤3
Когда требуется конкатенировать строки с использованием
Stream, можно выбрать один из двух методов: Stream.reduce() или Stream.collect(Collectors.joining()).Пример с
Stream.reduce(): List<String> list = List.of("Str1", "Str2", "Str3");
String result = list.stream().reduce("", (a, b) -> a + b);
System.out.println(result); // Str1Str2Str3Пример с
Collectors.joining(): List<String> list = List.of("Str1", "Str2", "Str3");
String result = list.stream().collect(Collectors.joining());
System.out.println(result); // Str1Str2Str3Использование
reduce() для конкатенации строк не является оптимальным с точки зрения производительности. При каждом вызове операции +, создается новая строка, так как строки в Java неизменяемы. Это приводит к увеличению нагрузки на память из-за создания множества промежуточных объектов.В свою очередь, метод
Collectors.joining() использует StringBuilder для сборки строк, что значительно эффективнее. Он избегает создания лишних объектов и снижает потребление памяти.#java #Stream #reduce #joining
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤1