一、对List< Map >中指定键对应的值进行排序
// 创建List对象
List<Map<String,Object>> list = new ArrayList<>();
Random random = new Random();
// 循环添加数据
for (int i = 0; i < 10; i++) {
Map<String,Object> map = new HashMap<>();
map.put("id",1);
map.put("name","test"+i);
map.put("age",random.nextInt(100));
list.add(map);
}
System.out.println("排序前:---");
list.forEach(System.out::println);
// 排序的主要逻辑
list.sort((o1,o2) -> {
Integer age = Integer.valueOf(o1.getOrDefault("age",Integer.MIN_VALUE).toString());
Integer age1 = Integer.valueOf(o2.getOrDefault("age",Integer.MIN_VALUE).toString());
// return age.compareTo(age1); // 升序
return age1.compareTo(age); // 降序
});
System.out.println("排序后:---");
list.forEach(System.out::println);
注意:
(1)、升序和降序的主要区别就是方法中调用compareTo方法的对象不同,其余没有变化
(2)、Map集合的getOrDefault方法是为了防止出现空指针异常(如果你的数据都不为空则可以直接用get方法进行取值)文章来源:https://www.toymoban.com/news/detail-598038.html
二、获取List< Map >中的指定键对应的最大值
(1)、可以按上述方法进行降序排序后获取第一个值
(2)、继上面的数据,使用jdk1.8的stream流进行获取最大值
// 若数据中不存在null值
int age = list.stream().mapToInt(m -> (Integer) m.get("age")).max().getAsInt();
// 若数据中可能存在null值
int maxAge = list.stream().mapToInt(m -> (Integer) m.getOrDefault("age",Integer.MIN_VALUE)).max().getAsInt();
三、获取List< Map >中的指定键对应的最小值
(1)、按照第一种排序方法进行升序排序后获取第一个值
(2)、继上面的数据,使用jdk1.8的stream流进行获取最小值
// 若数据中不存在null值
int age = list.stream().mapToInt(m -> (Integer) m.get("age")).min().getAsInt();
// 若数据中可能存在null值
int age = list.stream().mapToInt(m -> (Integer) m.getOrDefault("age",Integer.MAX_VALUE)).min().getAsInt();
最大最小值获取注意事项:
(1)、获取最大最小值主要就是更换了其方法 max()和min()
(2)、获取最大最小值时Map对象的getOrDefault方法中的默认值记得更换,获取最大值时:Integer.MIN_VALUE,获取最小值时:Integer.MAX_VALUE,若数据中该字段(键)没有空值则直接使用get方法即可文章来源地址https://www.toymoban.com/news/detail-598038.html
四、获取List< Map >中的指定键对应的和以及平均数
// 获取和
// 数据中可能存在null值
int age = list.stream().mapToInt(m -> (Integer) m.getOrDefault("age",0)).sum();
// 数据中不会出现null值
int age = list.stream().mapToInt(m -> (Integer) m.get("age")).sum();
// 获取平均值
Double avgAge = list.stream().mapToInt(m -> (Integer) m.getOrDefault("age",0)).average().getAsDouble();
// 数据中不会出现null值
Double age = list.stream().mapToInt(m -> (Integer) m.get("age")).average().getAsDouble();
到了这里,关于Java中对于List<Map>对象中的相关操作(排序、最大值、最小值、和、平均数)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!