如何在Java8中获取List <Map <String,Object >>中的最大值

pam*_*ers 6 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;
}
Run Code Online (Sandbox Code Playgroud)

这将显示最大数量的关键字"A".

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

Era*_*ran 10

如果值预期为整数,我会将类型更改MapMap<String,Integer>:

List<Map<String,Integer>> list;
Run Code Online (Sandbox Code Playgroud)

然后你可以找到最大值:

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

您可以通过使用getOrDefault而不是get避免null值来缩短它:

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

  • `IntStream.max`返回一个`OptionalInt`. (2认同)