java 8 Collections 多字段排序

以前的做法:

Collections.sort(list, (o1, o2) -> {
    if(o1.getFlexAgentId().equals(template.getFlexAgentId())
            && !o2.getFlexAgentId().equals(template.getFlexAgentId())){
        return 1;
    }else if(WeiBoGuideConstant.isWeiboChannel(Long.valueOf(template.getFlexAgentId()))
            && o1.getFlexAgentId().equals(WeiBoGuideConstant.WEIBO_ALL_CHANNEL.toString())
            && !o2.getFlexAgentId().equals(WeiBoGuideConstant.WEIBO_ALL_CHANNEL.toString())){
        return 1;
    }else if(o1.getFlexAgentId().equals("0")
            && !o2.getFlexAgentId().equals("0")){
        return 1;
    }else {
        return -1;
    }
});
Collections.sort(invalidAdList, Comparator.comparing(BillUrlResponse::getHdStartTime).reversed());

多级排序(java 8)

list.stream().sorted(Comparator.comparing(类::属性一).reversed().thenComparing(类::属性二).reversed());//先以属性一升序,升序结果进行属性一降序,再进行属性二升序,结果进行属性一降序属性二降序
 
list.stream().sorted(Comparator.comparing(类::属性一).thenComparing(类::属性二,Comparator.reverseOrder()));//先以属性一升序,再进行属性二降序

通过以上例子我们可以发现

  1. Comparator.comparing(类::属性一).reversed();

  2. Comparator.comparing(类::属性一,Comparator.reverseOrder());

两种排序是完全不一样的,一定要区分开来

1 是得到排序结果后再排序

2是直接进行排序,很多人会混淆导致理解出错,2更好理解,建议使用

例子:

List<MyUserCouponVo> couponList = couponList.stream().sorted(Comparator.comparing(MyUserCouponVo::getStatus)
                    .thenComparing(c-> c.getExpiredStartTime().compareTo(new Date()))
                    .thenComparing(MyUserCouponVo::getExpiredEndTime)).collect(Collectors.toList());
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容