将列表映射到地图中

问题描述 投票:0回答:1
@Getter static class Student {
    private Map<Status, Marks> statusAndMarks; 
}

Map<Status, Student> map = new HashMap<>();
for (Student student : studentList) {
        for (Status status : student.getStatusAndMarks().keySet()) {
            map.put(status, student);
        }
    }

如何在Java 8中以功能样式编写以上编写的代码?我已经编写了以下代码,但是如何编写代码的结果是不可变的映射,而我不需要在lambda之前创建映射?

studentList
    .forEach(student -> {
        student
        .getStatusAndMarks()
        .keySet().stream()
        .map(key -> map.put(key, statusKeyImportantMessage));
        });
java java-8 java-stream
1个回答
1
投票

您可以尝试这样的事情:

studentList.stream()
        .flatMap(student -> student.getStatusAndMarks()
                .keySet().stream().map(status -> Map.entry(status, student)))
        .collect(toMap(Map.Entry::getKey, Map.Entry::getValue));
© www.soinside.com 2019 - 2024. All rights reserved.