使用外部比较器Comparator进行排序 List<TakeStoreFormInfo> details = new ArrayList<>(takeStoreForm.getTakeStoreFormInfos()); Comparator<TakeStoreFormInfo> type = Comparator.comparing(TakeStoreFormInfo::getType); Comparator<TakeStoreFormInfo> sparePartTypeId = Comparator.comparing(TakeStoreFormInfo::getSparePartTypeId); Comparator<TakeStoreFormInfo> sbid = Comparator.comparing(TakeStoreFormInfo::getSparePartId); 多字段 后面增加thenComparing,默认排序规则为正序 details.sort(type.thenComparing(sparePartTypeId).thenComparing(sbid));
List<UserCouponVo> newList = list.stream().sorted(Comparator
.comparing(UserCouponVo::getA,Comparator.reverseOrder())
.thenComparing(UserCouponVo::getB)
.thenComparing(UserCouponVo::getC,Comparator.reverseOrder())
).collect(Collectors.toList());
原因:
Comparator.comparing(类属性).reversed() 是得到正序结果后再逆序 , .reversed() 是逆反前面的所有排序
Comparator.comparing(类属性,Comparator.reverseOrder()); 当前字段直接逆序。
现在有个排序需求:
a-倒序
b-当a相同时,正序
c-当b相同时,倒序
正确的写法:
List<UserCouponVo> newList = list.stream().sorted(Comparator
.comparing(UserCouponVo::getA,Comparator.reverseOrder())
.thenComparing(UserCouponVo::getB)
.thenComparing(UserCouponVo::getC,Comparator.reverseOrder())
).collect(Collectors.toList());
所以,当需求为:
a-倒序
b-当a相同时,倒序
c-当b相同时,倒序
可以写成:
List<UserCouponVo> newList = list.stream().sorted(Comparator
.comparing(UserCouponVo::getA)
.thenComparing(UserCouponVo::getB)
.thenComparing(UserCouponVo::getC).reversed()
).collect(Collectors.toList());
所以,当需求为:
a-正序
b-当a相同时,正序
c-当b相同时,正序
可以写成:
List<UserCouponVo> newList = list.stream().sorted(Comparator
.comparing(UserCouponVo::getA)
.thenComparing(UserCouponVo::getB).reversed()
.thenComparing(UserCouponVo::getC).reversed()
).collect(Collectors.toList());
List<UserCouponVo> newList = list.stream().sorted(Comparator
.comparing(UserCouponVo::getA)
.thenComparing(UserCouponVo::getB)
.thenComparing(UserCouponVo::getC)
).collect(Collectors.toList());