我正在看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()
。
答案 0 :(得分:-1)
return scores.entrySet().stream()
.collect(Collectors.groupingBy(Map.Entry::getValue,
Collectors.mapping(Map.Entry::getKey,
Collectors.toList())));