【问题标题】:Java 8 stream - Find max count values for Map<String, List<Object>>Java 8 流 - 查找 Map<String, List<Object>> 的最大计数值
【发布时间】:2018-07-18 18:16:21
【问题描述】:

我对 Java 8 不太熟悉,想看看是否可以使用流找到与以下代码等效的东西。

下面的代码主要尝试寻找具有最大值的键并返回该键。我在这种格式的任何地方都找不到太多帮助。

int max = 0;
String maxValuesString = null;
for (Map.Entry<String, List<String>> entry : map.entrySet()) {
    if(max < entry.getValue().size()) {
        maxValuesString = entry.getKey();
        max = entry.getValue().size();
    }
}

【问题讨论】:

    标签: java java-8 java-stream


    【解决方案1】:

    您可以将max 与检查值大小的比较器一起使用

    String maxValuesString = map.entrySet()
                .stream()
                .max(Comparator.comparingInt(entry -> entry.getValue().size()))
                .map(Map.Entry::getKey) 
                .orElse(null);
    

    编辑:感谢 Andreas 的comment below 干净的optional.map

    【讨论】:

    • 最佳答案:1) 变量名称与问题相同。 2)如果地图为空,请不要崩溃和烧毁,即应该与问题相同的结果(null)。
    • .get().getKey() 替换为.map(Map.Entry::getKey).orElse(null) 以支持空地图。
    • 谢谢 :) 真的很有帮助。这是我第一次来这里,我很高兴看到如此快速的响应:D
    猜你喜欢
    • 1970-01-01
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    • 2017-01-28
    • 2021-12-01
    • 2020-01-26
    • 2018-09-22
    • 2022-01-17
    相关资源
    最近更新 更多