java - 如何在 Java 8 的 List<Map<String, Object>> 中获取最大值

标签 java java-8

我正试图在 Java 8 中获得最大值。

它由 List<Map<String,Object>> 组成.

Java 8 之前:

int max = 0;
for(Map<String, Object> map : list) {
    int tmp = map.get("A");
    if(tmp>max)
       max=tmp;
}

这将显示最大数量的键“A”。

我试图在 Java 8 中做同样的事情,但我无法获得最大值。

最佳答案

如果期望值是整数,我会更改 Map 的类型至 Map<String,Integer> :

List<Map<String,Integer>> list;

然后你可以找到最大值:

int max = list.stream()
             .map(map->map.get("A"))
             .filter(Objects::nonNull)
             .mapToInt(Integer::intValue)
             .max()
             .orElse(someDefaultValue);

您可以使用 getOrDefault 使其更短而不是 get避免null值(value)观:

int max = list.stream()
             .mapToInt(map->map.getOrDefault("A",Integer.MIN_VALUE))
             .max();
             .orElse(someDefaultValue);

关于java - 如何在 Java 8 的 List<Map<String, Object>> 中获取最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43580666/

相关文章:

java - 如何让按钮只工作一次;

java - jdk 1.7 的源/规范文件

Java 可选 - If Else 语句

Java 8 如何处理属性为 null 的情况

java - fragment 与传承

java - hibernate join fetch 不会获取所有子项

java-8 - Java8 方法引用的 Proguard 混淆在运行时中断

Java 8 LocalDateTime 今天在特定时间

json - 是否可以仅使用 JDK 或 HttpComponents 处理 JSON 响应?

java - 连接两个数组 Stream 时出现 ArrayStoreException