我在输入中有一个N个对象的列表,我想在子列表中对同一个族的对象进行分组。同一系列中的对象共享属性“File_identifier”。最后,我想通过一个键来访问这些子列表,该键是子列表中某个对象的属性。
SentinelReportModels是父列表
HashMap<String, List<SentinelReportModel>> hashmap = new HashMap<String, List<SentinelReportModel>>();
for (int i = 0; i < sentinelReportModels.size(); i++) {
for (int k = 0; k < sentinelReportModels.size(); k++) {
if (sentinelReportModels.get(i).getIdentifiantfichier()
.equals(sentinelReportModels.get(k).getIdentifiantfichier()) ) {
ArrayList<SentinelReportModel> listeTemp = new ArrayList<>();
listeTemp.add(sentinelReportModels.get(i));
listeTemp.add(sentinelReportModels.get(k));
hashmap.put(sentinelReportModels.get(i).getTypeflux(),listeTemp);
}
}
}
但是它不起作用,我得到带有重复项的X列表。
答案 0 :(得分:2)
我相信下面的代码应该可以解决问题。基本上,将所有的哨兵放在一个列表中。如果flux id不同,则会向地图添加新列表。
HashMap<String, List<SentinelReportModel>> hashmap = new HashMap<String, List<SentinelReportModel>>();
hashmap.put(,listeTemp);
for (int i = 0; i < sentinelReportModels.size(); i++) {
if (hashMap.get(sentinelReportModels.get(i).getTypeflux())==null) {
ArrayList<SentinelReportModel> list = new ArrayList<SentinelReportModel>();
list.add(sentinelReportModels.get(i));
hashMap.put(sentinelReportModels.get(i).getTypeflux(),list);
}else { hashMap.get(sentinelReportModels.get(i).getTypeflux()).add(sentinelReportModels.get(i));
}
}
答案 1 :(得分:1)
使用标准流很容易实现:
可以使用组获取子组列表:
Map<String, List<SentinelReportModel>> map =
sentinelReportModels.stream().collect(
Collectors.groupingBy(model -> model.getIdentifiantfichier()));
这会为您提供<identifiantfichier, List<SentinelReportModel>>
。
这可以正常处理为字符串/列表映射。
你的内部循环有一个缺陷,因为它没有考虑到先前的迭代可能已经为当前元素的identifiantfichier
创建了一个列表并且无论如何都会覆盖它。