当前位置:首页 > 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 的第二个参数指定下游收集器,例如计算每组的数量或进一步处理:

java如何给集合分组

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() 实现分组:

java如何给集合分组

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 的键或值进行排序:

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

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

标签: java
分享给朋友:

相关文章

java如何创建文件

java如何创建文件

使用 File 类创建文件 通过 File 类的 createNewFile() 方法创建文件。此方法返回布尔值,表示文件是否成功创建。 import java.io.File; import ja…

java如何react

java如何react

在Java中使用React 要在Java项目中集成React,通常需要将React前端与Java后端结合使用。以下是几种常见的方法: 使用Spring Boot作为后端 Spring Boot是一个…

java如何创建类

java如何创建类

创建类的基本语法 在Java中,类通过class关键字定义,语法如下: [访问修饰符] class 类名 { // 成员变量(属性) // 构造方法 // 成员方法 }…

如何搭建java开发环境

如何搭建java开发环境

下载并安装JDK 从Oracle官网或OpenJDK下载适合操作系统的JDK版本。运行安装程序并按照提示完成安装,建议选择默认路径以减少配置复杂度。 配置环境变量 在系统环境变量中添加JAVA_HO…

如何升级java

如何升级java

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

win7如何配置java环境变量

win7如何配置java环境变量

下载并安装Java 从Oracle官网下载适合的Java Development Kit (JDK)安装包,选择与系统位数(32位或64位)匹配的版本。运行安装程序,按照提示完成安装,默认路径通常为C…