Java 8流:迭代列表地图

waX*_*Xve 10 java hashmap java-8 java-stream

我有以下对象和地图:

MyObject
    String name;
    Long priority;
    foo bar;

Map<String, List<MyObject>> anotherHashMap;
Run Code Online (Sandbox Code Playgroud)

我想在另一个地图中转换地图.结果映射的键是输入映射的键.结果映射的值是My对象的Property"name",按优先级排序.

排序和提取的名字是没有问题的,但我不能把它放到结果地图.我是用旧的Java 7方式做的,但是可以使用流式API是很好的.

Map<String, List<String>> result = new HashMap<>();
for (String identifier : anotherHashMap.keySet()) {
    List<String> generatedList = anotherHashMap.get(identifier).stream()...;

    teaserPerPage.put(identifier, generatedList);
}
Run Code Online (Sandbox Code Playgroud)

有人有想法吗?我试过这个,但卡住了:

anotherHashMap.entrySet().stream().collect(Collectors.asMap(..., ...));
Run Code Online (Sandbox Code Playgroud)

mko*_*bit 11

Map<String, List<String>> result = anotherHashMap
    .entrySet().stream()                    // Stream over entry set
    .collect(Collectors.toMap(              // Collect final result map
        Map.Entry::getKey,                  // Key mapping is the same
        e -> e.getValue().stream()          // Stream over list
            .sorted(Comparator.comparingLong(MyObject::getPriority)) // Sort by priority
            .map(MyObject::getName)         // Apply mapping to MyObject
            .collect(Collectors.toList()))  // Collect mapping into list
        );
Run Code Online (Sandbox Code Playgroud)

实质上,您将流式传输每个条目集并将其收集到新映射中.要计算新映射中的值,可以List<MyOjbect>从旧映射流式传输,排序并应用映射和集合函数.在这种情况下,我用作MyObject::getName映射并将结果名称收集到列表中.