List<Map<String,Object>> 排序,使用collections工具类,或者Java 8 新特性stream来排序

闲话不多说,直接上才艺!

1.首先先创建一个用于排序的List<Map<String,Object>> list,这里我定义了一个方法返回一个list

public static List<Map<String,Object>> getListMap() throws ParseException {
        List<Map<String, Object>> list = new LinkedList<>();
        SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        Map<String, Object> map1 = new HashMap<>();
        map1.put("name","张三"); //姓名
        map1.put("salary", new BigDecimal(18));//薪资
        map1.put("birthday", sd.parse("2021-09-09 22:02:36")); //出生年月日
        list.add(map1);

        Map<String, Object> map2 = new HashMap<>();
        map2.put("name","李四");
        map2.put("salary", new BigDecimal(33));
        map2.put("birthday", sd.parse("2021-09-09 22:02:20"));
        list.add(map2);

        Map<String, Object> map3 = new HashMap<>();
        map3.put("name","王五");
        map3.put("salary", new BigDecimal(22));
        map3.put("birthday", sd.parse("2021-09-09 22:02:43"));
        list.add(map3);

        Map<String, Object> map4 = new HashMap<>();
        map4.put("name","赵六");
        map4.put("salary", new BigDecimal(30));
        map4.put("birthday", sd.parse("2021-09-09 22:02:11"));
        list.add(map4);

        Map<String, Object> map5 = new HashMap<>();
        map5.put("name","孙七");
        map5.put("salary", new BigDecimal(44));
        map5.put("birthday", sd.parse("2021-09-09 22:02:11"));
        list.add(map5);

        Map<String, Object> map6 = new HashMap<>();
        map6.put("name","周八");
        map6.put("salary", new BigDecimal(15));
        map6.put("birthday", sd.parse("2021-09-09 22:02:11"));
        list.add(map6);

        return list;
    }

2.新建一个普通Java类,获取用于排序的字段

public class BaseClase implements Serializable {

    public static BigDecimal getMapValueBySalary(Map<String,Object> map ){
        return (BigDecimal) map.get("salary");
    }

    public static Date getMapValueByBirthday(Map<String,Object> map ){
        return (Date) map.get("birthday");
    }
}

 

3.开始写main方法进行排序

public static void main(String[] args) throws ParseException {
        // 使用集合工具类进行升序排序,先用出生日期排序,再按薪资排序(升序就是o1-o2)
        List<Map<String, Object>> list1 = getListMap();
        Collections.sort(list1, new Comparator<Map<String, Object>>() {
            @Override
            public int compare(Map<String, Object> o1, Map<String, Object> o2) {
                if( ((Date) o1.get("birthday")).compareTo((Date) o2.get("birthday")) == 0 ){
                    return ((BigDecimal) o1.get("salary")).compareTo((BigDecimal) o2.get("salary"));
                } else {
                    return ((Date) o1.get("birthday")).compareTo((Date) o2.get("birthday"));
                }
            }
        });
        System.out.println("------------------------使用集合工具类collections升序排序-----------");
        list1.forEach(map -> System.out.println(map));
        
        //使用集合工具类进行降序排序(降序就是o2-o1)
        List<Map<String, Object>> list3 = getListMap();
        Collections.sort(list3, new Comparator<Map<String, Object>>() {
            @Override
            public int compare(Map<String, Object> o1, Map<String, Object> o2) {
                if( ((Date) o2.get("birthday")).compareTo((Date) o1.get("birthday")) == 0 ){
                    return ((BigDecimal) o2.get("salary")).compareTo((BigDecimal) o1.get("salary"));
                } else {
                    return ((Date) o2.get("birthday")).compareTo((Date) o1.get("birthday"));
                }
            }
        });
        System.out.println("------------------------使用集合工具类collections降序排序-----------");
        list3.forEach(map -> System.out.println(map));

//        使用Java 8 新特性 stream进行升序排序,先用出生日期排序,再按薪资排序
//        BaseClase就是上面提到的,新建的一个普通Java类
        List<Map<String, Object>> list2 = getListMap();
        List<Map<String, Object>> collect = list2.stream().sorted(Comparator.comparing(BaseClase::getMapValueByBirthday).thenComparing(BaseClase::getMapValueBySalary)).collect(Collectors.toList());
        System.out.println("========================使用stream升序排序=========================");
        collect.forEach(map -> System.out.println(map));
//        使用Java 8 新特性 stream进行降序排序(在排序结束后使用reversed方法)
        List<Map<String, Object>> list4 = getListMap();
        List<Map<String, Object>> collect4 = list4.stream().sorted(Comparator.comparing(BaseClase::getMapValueByBirthday).thenComparing(BaseClase::getMapValueBySalary).reversed()).collect(Collectors.toList());
        System.out.println("========================使用stream降序排序=========================");
        collect4.forEach(map -> System.out.println(map));


    }

 运行结果:

 

------------------------使用集合工具类collections升序排序-----------
{birthday=Thu Sep 09 22:02:11 CST 2021, name=周八, salary=15}
{birthday=Thu Sep 09 22:02:11 CST 2021, name=赵六, salary=30}
{birthday=Thu Sep 09 22:02:11 CST 2021, name=孙七, salary=44}
{birthday=Thu Sep 09 22:02:20 CST 2021, name=李四, salary=33}
{birthday=Thu Sep 09 22:02:36 CST 2021, name=张三, salary=18}
{birthday=Thu Sep 09 22:02:43 CST 2021, name=王五, salary=22}
------------------------使用集合工具类collections降序排序-----------
{birthday=Thu Sep 09 22:02:43 CST 2021, name=王五, salary=22}
{birthday=Thu Sep 09 22:02:36 CST 2021, name=张三, salary=18}
{birthday=Thu Sep 09 22:02:20 CST 2021, name=李四, salary=33}
{birthday=Thu Sep 09 22:02:11 CST 2021, name=孙七, salary=44}
{birthday=Thu Sep 09 22:02:11 CST 2021, name=赵六, salary=30}
{birthday=Thu Sep 09 22:02:11 CST 2021, name=周八, salary=15}
========================使用stream升序排序=========================
{birthday=Thu Sep 09 22:02:11 CST 2021, name=周八, salary=15}
{birthday=Thu Sep 09 22:02:11 CST 2021, name=赵六, salary=30}
{birthday=Thu Sep 09 22:02:11 CST 2021, name=孙七, salary=44}
{birthday=Thu Sep 09 22:02:20 CST 2021, name=李四, salary=33}
{birthday=Thu Sep 09 22:02:36 CST 2021, name=张三, salary=18}
{birthday=Thu Sep 09 22:02:43 CST 2021, name=王五, salary=22}
========================使用stream降序排序=========================
{birthday=Thu Sep 09 22:02:43 CST 2021, name=王五, salary=22}
{birthday=Thu Sep 09 22:02:36 CST 2021, name=张三, salary=18}
{birthday=Thu Sep 09 22:02:20 CST 2021, name=李四, salary=33}
{birthday=Thu Sep 09 22:02:11 CST 2021, name=孙七, salary=44}
{birthday=Thu Sep 09 22:02:11 CST 2021, name=赵六, salary=30}
{birthday=Thu Sep 09 22:02:11 CST 2021, name=周八, salary=15}

 

 

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值