You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java 8中使用groupBy()按name与id双重分组Person对象

实现Person列表按name和id层级分组

要实现按name分组后再按id细分的需求,直接使用**嵌套的Collectors.groupingBy**即可完成,最终得到Map<String, Map<Integer, List<Person>>>的结构。

修改后的代码

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static java.util.stream.Collectors.groupingBy;

public class Main {
    public static void main(String[] args) {
        Person person1 = new Person(1, "John", 4);
        Person person2 = new Person(2, "John", 3);
        Person person3 = new Person(2, "John", 4);

        List<Person> personList = new ArrayList<>();
        personList.add(person1);
        personList.add(person2);
        personList.add(person3);

        // 嵌套分组:先按name分组,再按id分组
        Map<String, Map<Integer, List<Person>>> personByNameAndId = personList.stream()
                .collect(groupingBy(Person::getName, groupingBy(Person::getId)));

        System.out.println(personByNameAndId);
    }
}

// 补充完整Person类(包含构造器、getter和toString方法)
class Person {
    private int id;
    private String name;
    private int score;

    public Person(int id, String name, int score) {
        this.id = id;
        this.name = name;
        this.score = score;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public int getScore() {
        return score;
    }

    @Override
    public String toString() {
        return "Person{id=" + id + ", name='" + name + "', score=" + score + "}";
    }
}

预期输出

{John={1=[Person{id=1, name='John', score=4}], 2=[Person{id=2, name='John', score=3}, Person{id=2, name='John', score=4}]}}

代码说明

  • 外层groupingBy(Person::getName)负责将所有Person按name分成第一级分组;
  • 内层groupingBy(Person::getId)作为第二个参数传入,将每个name分组下的Person再按id进行二次分组;
  • 最终结构中,同一个name下不同id的Person会被分到独立的列表中,完全符合需求。

内容的提问来源于stack exchange,提问作者Dattq2303

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 12:36:23