使用Java 8流反转Map结构

Hen*_*rre 4 java

给一个班级

public class MyClass {
    public int langId;
    public int sectionId;
}
Run Code Online (Sandbox Code Playgroud)

如果我有一个映射将LangId映射到具有该LangId的MyClass的所有实例:

Map<Integer, List<MyClass>> mapLangIdToListOfMyClass = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)

使用Java 8流,是否有一种简单的方法来使用前一个Map并创建一个新的Map,它将SectionId映射到具有SectionId的MyClass的所有实例:

Map<Integer, List<MyClass>> mapSectionIdToListOfMyClass = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)

Pau*_*ton 6

我想你能做到

Map<Integer, List<MyClass>> mapSectionIdToListOfMyClass = mapLangIdToListOfMyClass
                               .values()
                               .stream()
                               .flatMap(List::stream)
                               .collect(Collectors.groupingBy(j -> j.sectionId));
Run Code Online (Sandbox Code Playgroud)