一、集合元素排序:

(1)集合条件排序(java8流):stream().sorted()

  1. // 状态排序
  2. orderListDTOS.stream().sorted(Comparator.comparing(OrderListDTO::getOrderStatusStr)
  3. // 评价时间 为null靠前
  4. .thenComparing(OrderListDTO::getEvaluateTime, Comparator.nullsFirst(String::compareTo).reversed())
  5. // 下单时间 倒序
  6. .thenComparing(OrderListDTO::getOrderTime, Comparator.nullsFirst(String::compareTo)).reversed())
  7. // 赋值给新集合 进行保存
  8. .collect(Collectors.toList()).forEach(order -> {
  9. OrderListDTO orderListDTO = new OrderListDTO();
  10. BeanUtils.copyProperties(order, orderListDTO);
  11. orders.add(orderListDTO);
  12. });

参数解释:

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流较慢)

  1. List<Object> list=new ArrayList<Object>();
  2. // Arrays.sort
  3. Arrays.sort(list, new Comparator<Integer>() {
  4. @Override
  5. public int compare(Integer s1, Integer s2) {
  6. return s1-s2;// 排序说明,如果是S1-S2,就是升序排列。如果是S2-S1,就是降序排列。
  7. }
  8. });
  9. println(Arrays.toString(list));
  10. // Collections.sort
  11. Collections.sort(list, new Comparator<People>() {
  12. @Override
  13. public int compare(People o1, People o2) {
  14. if (o1.age > o2.age) {// 按照年龄大小排序,年龄大则排在后边,返回正数
  15. return 1;
  16. } else {
  17. return -1;
  18. }
  19. }
  20. });
  21. // Collections.sort 简化写法:
  22. Collections.sort(list,(a,b)->(a.getId()-b.getId()));