Ответ
В Java группировку данных удобно выполнять с помощью Stream API и коллектора Collectors.groupingBy().
import java.util.*;
import java.util.stream.Collectors;
List<String> names = Arrays.asList("John", "Jane", "Adam", "Eve");
// Группировка строк по их длине
Map<Integer, List<String>> groupedByLength = names.stream()
.collect(Collectors.groupingBy(String::length));
// Результат: {4=[John, Jane, Adam], 3=[Eve]}
// Многоуровневая группировка и агрегация
Map<Integer, Long> countByLength = names.stream()
.collect(Collectors.groupingBy(String::length, Collectors.counting()));
// Результат: {4=3, 3=1}
В SQL для группировки используется оператор GROUP BY, часто в сочетании с агрегатными функциями (COUNT, SUM, AVG).
-- Группировка пользователей по городу и подсчет их количества
SELECT city, COUNT(*) as user_count
FROM users
GROUP BY city;
Ключевые моменты:
- В Java
groupingByсоздаетMap, где ключ — критерий группировки, а значение — коллекция элементов. - Для сложной логики можно использовать кастомные коллекторы.
- В SQL индексы на полях, используемых в
GROUP BY, могут значительно ускорить выполнение запроса.