一、集合元素排序:
(1)集合条件排序(java8流):stream().sorted()
// 状态排序
orderListDTOS.stream().sorted(Comparator.comparing(OrderListDTO::getOrderStatusStr)
// 评价时间 为null靠前
.thenComparing(OrderListDTO::getEvaluateTime, Comparator.nullsFirst(String::compareTo).reversed())
// 下单时间 倒序
.thenComparing(OrderListDTO::getOrderTime, Comparator.nullsFirst(String::compareTo)).reversed())
// 赋值给新集合 进行保存
.collect(Collectors.toList()).forEach(order -> {
OrderListDTO orderListDTO = new OrderListDTO();
BeanUtils.copyProperties(order, orderListDTO);
orders.add(orderListDTO);
});
参数解释:
Comparator:比较器。
Comparator.comparing(OrderListDTO::getOrderStatusStr):按OrderListDTO对象中的orderStatusStr字段正序排序。
.thenComparing(OrderListDTO::getEvaluateTime, Comparator.nullsFirst(String::compareTo)).reversed()
第二个排序条件:evaluateTime,为null时排序靠后;
Comparator.nullsFirst(String::compareTo).reversed():可以达到为null的靠前排序效果;
.reversed():倒序。
*另外资料参考:JAVA8之Comparator特殊排序以及ComparatorUtils介绍
(2)Arrays.sort、 Collections.sort排序(相对于Stream流较慢)
List<Object> list=new ArrayList<Object>();
// Arrays.sort
Arrays.sort(list, new Comparator<Integer>() {
@Override
public int compare(Integer s1, Integer s2) {
return s1-s2;// 排序说明,如果是S1-S2,就是升序排列。如果是S2-S1,就是降序排列。
}
});
println(Arrays.toString(list));
// Collections.sort
Collections.sort(list, new Comparator<People>() {
@Override
public int compare(People o1, People o2) {
if (o1.age > o2.age) {// 按照年龄大小排序,年龄大则排在后边,返回正数
return 1;
} else {
return -1;
}
}
});
// Collections.sort 简化写法:
Collections.sort(list,(a,b)->(a.getId()-b.getId()));