Java 8流 - 查找Map <String,List <Object >>的最大计数值

mes*_*eso 3 java java-8 java-stream

我对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();
    }
}
Run Code Online (Sandbox Code Playgroud)

ern*_*t_k 8

您可以使用max比较器来检查值的大小

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

编辑:感谢安德烈斯在下面评论干净optional.map

  • 最佳答案:1)名称变量与问题相同.2)如果map为空,请不要崩溃和刻录,即应该与question(`null`)结果相同. (3认同)
  • 用`.map(Map.Entry :: getKey).orElse(null)`替换`.get().getKey()`以支持空映射. (3认同)