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

标签 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 代码中的反模式

如何获得相同的结果,生成“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/

相关文章:

java - 如何在java中绘制水平误差线?

java - 音乐服务在旋转时崩溃

java - 用 java 8 可选替换空检查

java - 比较同一列表的两个列表元素之间的值

c++ - 用于构造 std::thread 时,仿函数和 lambda 之间有什么区别

java - 接受来自用户的不同字符串,并使用 java 使用冒号作为分隔符显示它们

java - TOMEE 排除 JAR

c++ - 我可以在编译时判断 Boost.Phoenix lambda 的一组特定输入类型是否有效吗?

c++ - 如何在 C++11 的成员函数中实现多态函数?

java - 如何在 switch case 中使用枚举类