将entrySet流式传输到groupingBy而不是keySet

时间:2017-12-02 00:52:23

标签: java lambda

我正在看JavaOne video By Venkat Subramanian about lambdas

他有一个这样的例子:

Map<String, Integer>    scores  = new HashMap<>();
    scores.put("Jack", 12);
    scores.put("Jill", 15);
    scores.put("Tom", 11);
    scores.put("Darla", 15);
    scores.put("Nick", 15);
    scores.put("Nancy", 11);
    System.out.println(groupByScores(scores));

用这种方法:

public static Map<Integer, List<String>> groupByScores(Map<String, Integer> scores) {
    return scores.keySet().stream().collect(Collectors.groupingBy(scores::get));
}

对此有点麻烦的一件事是,它实际上是在keySet上进行迭代,为每个键调用map.get(key)。但这是普通的非lambda代码中的反模式

如何获得相同的结果,产生一个&#34; peopleByAge&#34;地图,但通过迭代entrySet而不是keySet?困难的部分显然是过去stream()

1 个答案:

答案 0 :(得分:-1)

return scores.entrySet().stream()
           .collect(Collectors.groupingBy(Map.Entry::getValue,
                    Collectors.mapping(Map.Entry::getKey,
                                       Collectors.toList())));