首页 > 解决方案 > 在Java中按两个字段对列表进行分组

问题描述

我有一个学生班。它包含城市、名称和国家字段。我有一个包含 Student 对象的 ArrayList。我想做的是将学生对象与城市和国家字段分组。我可以用这样的一个属性来做但是我怎么能同时做名字和国家呢?你有什么主意吗?我正在使用java 7。

for (Student student: studentList) {
    Long key  = student.country;
        if(map.containsKey(key)){
            List<Student> list = map.get(key);
            list.add(student);

        }else{
            List<Student> list = new ArrayList<Student>();
            list.add(student);
            map.put(key, list);
        }

}

标签: java

解决方案


使用一些允许您支持多个值的键类型,例如:

List<Object> key = Arrays.asList(city, country);

用这个替换你的Long key ...行(并相应地更新map类型),例如

Map<List<Object>, List<Student>> map = new HashMap<>();

List<Object>实际上在这里不是一个很好的选择,它只是权宜之计:我会使用类似特定CityAndCountry类的东西,例如使用谷歌的定义AutoValue


推荐阅读