嵌套循环的Lambda

问题描述 投票:-1回答:1

我如何应用收集器的分组来填充以下嵌套循环的哈希图?

分组依据

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);
    }
} 
java lambda collections java-stream
1个回答
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()));
© www.soinside.com 2019 - 2024. All rights reserved.