java8 stream 中对List<Map>排序

模拟数据如下

[{"name":"如花","id":6,"age":16,"height":1.68},{"name":"刘一","id":1,"age":28,"height":1.92},{"name":"张三","id":3,"age":18,"height":1.75},{"name":"李四","id":5,"age":23,"height":1.65},{"name":"陈二","id":2,"age":18,"height":1.72},{"name":"李四","id":4,"age":21,"height":1.75}]
    /**
     * 模拟数据
     * @return
     * @apiNote
     * id:      数据库主键id
     * name:    姓名(String)
     * age:     年龄(int)
     * height:  身高(BigDecimal)单位米
     */
    private List<Map<String, Object>> getMyData(){
        List<Map<String, Object>> list = new ArrayList<>();
        Map<String, Object> m1 = new HashMap<>();
        m1.put("id", 1);
        m1.put("name", "刘一");
        m1.put("age", 28);
        m1.put("height", new BigDecimal("1.92"));
        Map<String, Object> m2 = new HashMap<>();
        m2.put("id", 2);
        m2.put("name", "陈二");
        m2.put("age", 18);
        m2.put("height", new BigDecimal("1.72"));
        Map<String, Object> m3 = new HashMap<>();
        m3.put("id", 3);
        m3.put("name", "张三");
        m3.put("age", 18);
        m3.put("height", new BigDecimal("1.75"));
        Map<String, Object> m4 = new HashMap<>();
        m4.put("id", 4);
        m4.put("name", "李四");
        m4.put("age", 21);
        m4.put("height", new BigDecimal("1.75"));
        Map<String, Object> m5 = new HashMap<>();
        m5.put("id", 5);
        m5.put("name", "王五");
        m5.put("age", 23);
        m5.put("height", new BigDecimal("1.65"));
        Map<String, Object> m6 = new HashMap<>();
        m6.put("id", 6);
        m6.put("name", "如花");
        m6.put("age", 16);
        m6.put("height", new BigDecimal("1.68"));
        list.add(m6);
        list.add(m1);
        list.add(m3);
        list.add(m5);
        list.add(m2);
        list.add(m4);
        return list;
    }

BigDecimal 排序

执行如下代码

    public static void main(String[] args) {
        List<Map<String, Object>> studentList = getMyData();
        // 按身高升序
        List<Map<String, Object>> sortedByHeightAscList = studentList.stream().sorted(Comparator.comparing(h -> ((BigDecimal) h.get("height")))).collect(Collectors.toList());
        sortedByHeightAscList.stream().forEach(item -> {
            System.out.println(item.get("name") + "的身高:" + item.get("height"));
        });
        System.out.println();
        // 按身高降序
        List<Map<String, Object>> sortedByHeightDescList = studentList.stream().sorted((h1, h2) -> ((BigDecimal)h2.get("height")).compareTo((BigDecimal)h1.get("height"))).collect(Collectors.toList());
        sortedByHeightDescList.stream().forEach(item -> {
            System.out.println(item.get("name") + "的身高:" + item.get("height"));
        });
    }

身高【升序】排列结果

王五的身高:1.65
如花的身高:1.68
陈二的身高:1.72
张三的身高:1.75
李四的身高:1.75
刘一的身高:1.92

身高【降序】排列结果

刘一的身高:1.92
张三的身高:1.75
李四的身高:1.75
陈二的身高:1.72
如花的身高:1.68
王五的身高:1.65

String 排序

按名称升序

输出结果

刘一
如花
张三
李四
王五
陈二

按名称降序

输出结果

陈二
王五
李四
张三
如花
刘一
  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值