我正在观看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 代码中的反模式。
如何获得相同的结果,生成“peopleByAge”映射,但通过迭代 entrySet
而不是 keySet
?最困难的部分显然是stream()
之后的一切。
最佳答案
return scores.entrySet().stream()
.collect(Collectors.groupingBy(Map.Entry::getValue,
Collectors.mapping(Map.Entry::getKey,
Collectors.toList())));
关于java - 将entrySet流式传输到groupingBy而不是keySet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47603462/