TreeMap 默认是根据key排序的,如何降序呢?

/**
     *  测试treeMap的有序性
     */
    @Test
    public void testTreeMap() {
        List<Order> orders = new ArrayList<>();
        Order o1 = new Order();
        o1.setName("0001.01");
        o1.setId(1);
        o1.setDescription("111111111");

        Order o2 = new Order();
        o2.setName("0001.01");
        o2.setId(2);
        o2.setDescription("22222222");




        Order o3 = new Order();
        o3.setName("0001.02 ");
        o3.setId(3);
        o3.setDescription("b   333333333333333");

        Order o4 = new Order();
        o4.setName("0001.02");
        o4.setId(4);
        o4.setDescription("d   4444444");

        Order o5 = new Order();
        o5.setName("0001.03");
        o5.setId(5);
        o5.setDescription("5555555555");

        orders.add(o5);
        orders.add(o4);
        orders.add(o3);
        orders.add(o2);
        orders.add(o1);


        // TreeMap底层是根据红黑树的数据结构构建的,默认是根据key的自然排序来组织(比如integer的大小,String的字典排序)。
        // 所以,TreeMap只能根据key来排序
        Map<String, List<Order>> treeMap = orders.stream()
                .collect(Collectors.groupingBy(Order::getName,TreeMap::new,Collectors.toList()));
        System.out.println(treeMap);

        // 让treeMap 降序
        TreeMap<String,List<Order>> descTreeMap= new TreeMap<String,List<Order>>(new Comparator<String>(){
            public int compare(String a,String b){
                return b.compareTo(a);
            }
        });
        Map<String, List<Order>> hashMap = orders.stream()
                .collect(Collectors.groupingBy(Order::getName,HashMap::new,Collectors.toList()));


        // map 在java8的第一种遍历方式
        hashMap.forEach((k, v) ->{
            descTreeMap.put(k,v);

        });

// map 在java8的第二种遍历方式
//        hashMap.keySet().forEach(key ->  descTreeMap.put(key,hashMap.get(key)));
        System.out.println(descTreeMap);


    }

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值