当前位置:首页 > Java

java如何给集合分组

2026-03-18 13:48:45Java

使用 Collectors.groupingBy() 方法

Java 8 及以上版本可以通过 StreamCollectors.groupingBy() 对集合进行分组。该方法根据指定的分类函数将元素分组到 Map 中。

List<String> list = Arrays.asList("apple", "banana", "cherry", "apple");
Map<String, List<String>> grouped = list.stream()
    .collect(Collectors.groupingBy(Function.identity()));
// 结果: {apple=[apple, apple], banana=[banana], cherry=[cherry]}

按自定义条件分组

可以通过 groupingBy 的第二个参数指定下游收集器,例如计算每组的数量或进一步处理:

Map<String, Long> countByGroup = list.stream()
    .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
// 结果: {apple=2, banana=1, cherry=1}

多级分组

使用嵌套的 groupingBy 实现多级分组:

List<Person> people = Arrays.asList(
    new Person("Alice", "London"),
    new Person("Bob", "New York"),
    new Person("Charlie", "London")
);
Map<String, Map<String, List<Person>>> multiGrouped = people.stream()
    .collect(Collectors.groupingBy(Person::getCity,
             Collectors.groupingBy(Person::getName)));
// 结果: {London={Alice=[...], Charlie=[...]}, New York={Bob=[...]}}

使用 Apache Commons Collections

如果项目使用 Apache Commons Collections,可以通过 CollectionUtils.groupBy() 实现分组:

List<String> list = Arrays.asList("apple", "banana", "cherry", "apple");
Map<String, List<String>> grouped = (Map<String, List<String>>) CollectionUtils.groupBy(list, 
    item -> item);
// 结果与 groupingBy 类似

手动遍历分组

对于低版本 Java 或需要更灵活控制的场景,可以手动遍历集合并填充 Map

Map<String, List<String>> manualGrouped = new HashMap<>();
for (String item : list) {
    manualGrouped.computeIfAbsent(item, k -> new ArrayList<>()).add(item);
}
// 结果: {apple=[apple, apple], banana=[banana], cherry=[cherry]}

分组后排序

分组后可以对 Map 的键或值进行排序:

java如何给集合分组

Map<String, List<String>> sortedByKey = new TreeMap<>(grouped);
// 按键自然排序

以上方法适用于 ListSet 等集合类型,根据需求选择合适的方式。

标签: java
分享给朋友:

相关文章

如何打开java

如何打开java

打开 Java 程序的方法 通过命令行运行 Java 程序 确保已安装 Java Development Kit (JDK) 并配置环境变量。使用 javac 编译 .java 文件,生成 .clas…

如何安装java环境

如何安装java环境

下载JDK安装包 访问Oracle官方网站或OpenJDK项目页面,选择适合操作系统的JDK版本(如Windows、macOS或Linux)。确保下载与系统架构匹配的版本(32位或64位)。 运行安…

如何运行java项目

如何运行java项目

运行Java项目的步骤 确保Java环境已安装 在运行Java项目前,需确认系统已安装Java Development Kit(JDK)。通过命令行输入java -version和javac -ver…

java如何解决高并发

java如何解决高并发

Java 高并发解决方案 使用线程池优化资源管理 线程池(如 ThreadPoolExecutor)能避免频繁创建和销毁线程的开销。通过核心线程数、最大线程数和任务队列的合理配置,可以平衡系统负载。例…

如何升级java

如何升级java

检查当前Java版本 在升级之前,需确认当前安装的Java版本。在终端或命令提示符中运行以下命令: java -version 输出会显示当前Java版本(如1.8.0_301或17.0.2)。…

java下载功能vue实现

java下载功能vue实现

Java 后端文件下载功能实现 后端需提供文件下载的接口,通常使用 HttpServletResponse 实现。以下是一个简单的 Java Spring Boot 示例: @GetMapping(…