Java小知识:使用Lambda表达式,对List集合分组并排序

背景:项目开始做统计分析,自然避免不了通过程序分组排序这些必要操作,毕竟通过程序来处理数据是基于内存的,性能效率要比直接写sql好很多。先日常记个简单的~

一.排序+分组联合使用

首先使用sorted对list进行排序,然后再使用groupingBy进行分组,代码如下:

Map<String, List<OrderBaseVO>> collectMap = historyHeaderStatisticsVOs.stream()
                    .sorted(Comparator.comparing(iteam -> iteam.getStatisticDate()))
                    .collect(Collectors.groupingBy(iteam -> iteam.getStatisticDate(), TreeMap::new, Collectors.toList()));

*需要注意的是要使用TreeMap定义分组对象,因为treeMap相对于hashMap是有序的,具体可自行百度~

二.使用sorted排序的常用场景

sorted可以说是很常用的函数了,以下是总结的几个常用场景,代码如下:

	1.对list进行正序排列
    public static <T> List<T> sort(List<T> list){
        return list.stream().sorted().collect(Collectors.toList());
    }

    2.对list进行倒序排列
    public static List<Integer> desc(List<Integer> list){
        return list.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
    }

    3.指定对象的某个字段属性,进行正序排列
    public static List<OrderBaseVO> sortForObject(List<OrderBaseVO> list){
        return list.stream().sorted(Comparator.comparing(OrderBaseVO::getStatisticDate))
        .collect(Collectors.toList());
    }

    4.指定对象的某个字段属性,进行倒叙排列
    public static List<OrderBaseVO> reversedForObject(List<OrderBaseVO> list){
        return list.stream().sorted(Comparator.comparing(OrderBaseVO::getStatisticDate).reversed())
        .collect(Collectors.toList());
    }
    5.根据多个字段,进行排序
    	倒序:List.sort(Comparator.comparing(Entity::getState).reversed().thenComparing(Entity::getName));
    	升序:List.sort(Comparator.comparing(Entity::getState).thenComparing(Entity::getName));
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值