java - 在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);
}
}
解决方案
使用一些允许您支持多个值的键类型,例如:
List<Object> key = Arrays.asList(city, country);
用这个替换你的Long key ...
行(并相应地更新map
类型),例如
Map<List<Object>, List<Student>> map = new HashMap<>();
(List<Object>
实际上在这里不是一个很好的选择,它只是权宜之计:我会使用类似特定CityAndCountry
类的东西,例如使用谷歌的定义AutoValue
)
推荐阅读
- python - 将多个数据帧写入单个平面文本文件以输入到 Pandas
- r - 在裂区设计上使用 agricolae 进行 ANOVA 的最佳方法是什么?
- powershell - Powershell 将一个特定文件夹解压缩到具有动态名称的文件中
- php - 我的简单 PHP 登录脚本没有按预期工作,我不知道为什么
- vue.js - 如果使用 IE,请关闭 vuex-persist
- python - 如何在 Conda 中从 yaml 文件安装软件包
- python - 如何限制员工用户只能在 Django 管理页面中查看他们的信息?
- reactjs - 如何在 React 切换菜单中实现链接到部分
- c++ - 如何阻止 LWA_COLORKEY 制作灰色轮廓?
- sql - 从oracle中的clob列中提取数据