Java中对于List<Map>对象中的相关操作(排序、最大值、最小值、和、平均数)

一、对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方法进行取值)

二、获取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方法即可

四、获取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();
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LiJiangTao_DEV

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值