以前的做法:
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()));//先以属性一升序,再进行属性二降序
通过以上例子我们可以发现
Comparator.comparing(类::属性一).reversed();
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());