我如何应用收集器的分组来填充以下嵌套循环的哈希图?
分组依据
Map schoolsByShortName = new HashMap();
Map schoolsByChair = new HashMap();
for(School school: List.getSchools()){
if(school.getChairs()!= null){
for(Chair chair: school.getChairs()){
if(chair.getPrimaryChair()){
List<School> schools = this.schoolsByChair.get(chair.getInitials());
if(schools == null){
schools = new ArrayList<>();
this.schoolsByChair.put(chair.getInitials(), schools);
}
schools.add(school);
}
}
}
if(school.getShortName()!=null){
this.schoolsByShortName.put(school.getShortName(), school);
}
}
答案 0 :(得分:0)
与此类似的事情。正如我想象的那样,将地图存储为一组,每个学校条目都应该是唯一的。您可以根据需要使用其他Collection。
Function<School, String> getSchoolsPrimaryChairInitials = school -> school.getChairs()
.stream()
.filter(Chair::isPrimaryChair)
.findFirst()
.get()//consider possibility of not having primary chair
.getInitials();
Map<String, Set<School>> schoolsByChair = schools
.stream()
.collect(Collectors.groupingBy(getSchoolsPrimaryChairInitials, Collectors.toSet()));
Map<String, Set<School>> schoolsByShortName = schools
.stream()
.collect(Collectors.groupingBy(School::getShortName, Collectors.toSet()));