HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Обработка коллекций через стримы в основном заканчивается двумя вариантами:</p>
1 <p>Обработка коллекций через стримы в основном заканчивается двумя вариантами:</p>
2 <ul><li>Из стрима формируется список через toList()</li>
2 <ul><li>Из стрима формируется список через toList()</li>
3 <li>Стрим сворачивается в какое-то значение через reduce()</li>
3 <li>Стрим сворачивается в какое-то значение через reduce()</li>
4 </ul><p>Второй случай распадается на различные варианты свертки, некоторые из которых встречаются очень часто. Чтобы не делать каждый раз одно и тоже, эти варианты сверток были реализованы в утилитарном классе Collectors в виде статических методов. В этом уроке мы рассмотрим эти методы.</p>
4 </ul><p>Второй случай распадается на различные варианты свертки, некоторые из которых встречаются очень часто. Чтобы не делать каждый раз одно и тоже, эти варианты сверток были реализованы в утилитарном классе Collectors в виде статических методов. В этом уроке мы рассмотрим эти методы.</p>
5 <p>Общий принцип работы этих методов такой. В конце цепочки вызывается метод collect(), куда передается конкретный коллектор. Пример подсчета количества элементов стрима:</p>
5 <p>Общий принцип работы этих методов такой. В конце цепочки вызывается метод collect(), куда передается конкретный коллектор. Пример подсчета количества элементов стрима:</p>
6 <h2>Агрегирующие функции</h2>
6 <h2>Агрегирующие функции</h2>
7 <p>Классическая свертка это разнообразные функции агрегации данных, такие как поиск суммы, минимального, максимального и среднего.</p>
7 <p>Классическая свертка это разнообразные функции агрегации данных, такие как поиск суммы, минимального, максимального и среднего.</p>
8 <p>Метод summingInt() принимает на вход один параметр, с помощью которого извлекается значение из элемента коллекции. В нашем случае мы уже работаем с нужным значением, поэтому используется метод Integer.intValue(), который возвращает это же число. В случае использования объектов необходимость такой реализации очевиднее:</p>
8 <p>Метод summingInt() принимает на вход один параметр, с помощью которого извлекается значение из элемента коллекции. В нашем случае мы уже работаем с нужным значением, поэтому используется метод Integer.intValue(), который возвращает это же число. В случае использования объектов необходимость такой реализации очевиднее:</p>
9 <p>Точно так же мы можем посчитать среднюю зарплату.</p>
9 <p>Точно так же мы можем посчитать среднюю зарплату.</p>
10 <p>Для подсчета минимального и максимального понадобится добавить обертку в виде метода Comparator, который делает необходимое сравнение.</p>
10 <p>Для подсчета минимального и максимального понадобится добавить обертку в виде метода Comparator, который делает необходимое сравнение.</p>
11 <h2>Конкатенация</h2>
11 <h2>Конкатенация</h2>
12 <p>Результат стрима можно преобразовать в строку с помощью Collectors.joining().</p>
12 <p>Результат стрима можно преобразовать в строку с помощью Collectors.joining().</p>
13 <p>При необходимости можно указать символы для оборачивания получившейся строки.</p>
13 <p>При необходимости можно указать символы для оборачивания получившейся строки.</p>
14 <h2>Группировка</h2>
14 <h2>Группировка</h2>
15 <p>Самый интересный вариант использования Collectors это группировка значений коллекции по каким-то признакам. Если предположить что у нас есть список сотрудников, то мы можем сгруппировать его по подразделению в котором они работают. На выходе получится Map.</p>
15 <p>Самый интересный вариант использования Collectors это группировка значений коллекции по каким-то признакам. Если предположить что у нас есть список сотрудников, то мы можем сгруппировать его по подразделению в котором они работают. На выходе получится Map.</p>
16 <p>Существует и более сложная версия группировки, в которой к получившейся группе применяется дополнительная свертка. Например так можно посчитать количество слов в тексте. Ниже пример этого кода, в котором для простоты текст уже разбит на список слов.</p>
16 <p>Существует и более сложная версия группировки, в которой к получившейся группе применяется дополнительная свертка. Например так можно посчитать количество слов в тексте. Ниже пример этого кода, в котором для простоты текст уже разбит на список слов.</p>
17 <p>Как работает этот код:</p>
17 <p>Как работает этот код:</p>
18 <ul><li>Так как в нашем списке обычные слова, а не объекты, лямбда имеет такой вид word -&gt; word.</li>
18 <ul><li>Так как в нашем списке обычные слова, а не объекты, лямбда имеет такой вид word -&gt; word.</li>
19 <li>Вторым параметром в Collectors.groupingBy() передается другой метод коллектора, который выполняется независимо для каждой получившейся группы. Результат этой свертки становится значением в результирующем Map. В примере выше, вместо списка слов мы получаем числовое значение.</li>
19 <li>Вторым параметром в Collectors.groupingBy() передается другой метод коллектора, который выполняется независимо для каждой получившейся группы. Результат этой свертки становится значением в результирующем Map. В примере выше, вместо списка слов мы получаем числовое значение.</li>
20 </ul><h2>Партицирование</h2>
20 </ul><h2>Партицирование</h2>
21 <p>Партицирование, это вариант свертки, в котором список значений делится на две группы по заданному условию. Выполняется с помощью метода Collectors.partitioningBy().</p>
21 <p>Партицирование, это вариант свертки, в котором список значений делится на две группы по заданному условию. Выполняется с помощью метода Collectors.partitioningBy().</p>
22  
22