|
| 1 | +package com.java8.stream; |
| 2 | + |
| 3 | + |
| 4 | +import com.bean.Order; |
| 5 | + |
| 6 | +import java.time.LocalDateTime; |
| 7 | +import java.time.ZoneId; |
| 8 | +import java.time.format.DateTimeFormatter; |
| 9 | +import java.util.*; |
| 10 | +import java.util.stream.Collectors; |
| 11 | + |
| 12 | +import static java.util.Comparator.naturalOrder; |
| 13 | + |
| 14 | +public class SortedDateDemo { |
| 15 | + |
| 16 | + |
| 17 | + /** |
| 18 | + * nullsFirst()表示如果属性为null,就放到最前面。 |
| 19 | + * nullsFirst()表示如果属性为null,就放到最前面。 |
| 20 | + * naturalOrder()表示自然排序(一般是升序), |
| 21 | + * Comparator.reverseOrder()表示 降序。 |
| 22 | + * |
| 23 | + * |
| 24 | + */ |
| 25 | + public void orderSort() { |
| 26 | + Order order1 =new Order(); |
| 27 | + order1.setDateStr("2021-10-01 00:00:00"); |
| 28 | + order1.setCreateTime(toDate("2022-01-01 00:00:00", "yyyy-MM-dd HH:mm:ss")); |
| 29 | + |
| 30 | + Order order2 =new Order(); |
| 31 | + order2.setDateStr("2021-10-01 00:00:00"); |
| 32 | + order2.setCreateTime(toDate("2022-02-01 00:00:00", "yyyy-MM-dd HH:mm:ss")); |
| 33 | + |
| 34 | + Order order3 =new Order(); |
| 35 | + order3.setDateStr("2021-10-03 00:00:00"); |
| 36 | + order3.setCreateTime(toDate("2022-02-01 00:00:00", "yyyy-MM-dd HH:mm:ss")); |
| 37 | + |
| 38 | + Order order4 =new Order(); |
| 39 | + order4.setDateStr(null); |
| 40 | + order4.setCreateTime(null); |
| 41 | + |
| 42 | + List<Order> list= new ArrayList<>(); |
| 43 | + list.add(order1); |
| 44 | + list.add(order2); |
| 45 | + list.add(order3); |
| 46 | + list.add(order4); |
| 47 | + |
| 48 | + //naturalOrder()表示自然排序(一般是升序),Comparator.nullsLast表示如果属性为null,就放到最后面 |
| 49 | + Comparator<Order> comparator = Comparator.comparing(Order::getDateStr, Comparator.nullsLast(naturalOrder()) ); |
| 50 | + List<Order> orderList = list.stream().sorted(comparator).collect(Collectors.toList()); |
| 51 | +// System.out.println("orderList:"+orderList); |
| 52 | + |
| 53 | + //Comparator.reverseOrder表示 降序,nullsFirst表示如果属性为null,就放到最前面。 |
| 54 | + Comparator<Order> comparator2 = Comparator.comparing(Order::getDateStr, Comparator.nullsFirst(Comparator.reverseOrder())); |
| 55 | + List<Order> orderList2 = list.stream().sorted(comparator2).collect(Collectors.toList()); |
| 56 | + System.out.println("orderList2:"+ orderList2); |
| 57 | + |
| 58 | + //先按第一个字段降序,再按第二个字段降序,如果属性为null,就放到最后面。 |
| 59 | + Comparator<Order> comparator3 = Comparator.comparing(Order::getDateStr, Comparator.nullsLast(Comparator.reverseOrder())) |
| 60 | + .thenComparing(Order::getCreateTime, Comparator.nullsLast(Comparator.reverseOrder())); |
| 61 | + List<Order> orderList3 = list.stream().sorted(comparator3).collect(Collectors.toList()); |
| 62 | +// System.out.println("orderList3:"+ orderList3); |
| 63 | + } |
| 64 | + |
| 65 | + public static Date toDate(String dateTimeStr, String pattern) { |
| 66 | + DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern); |
| 67 | + LocalDateTime localDateTime = LocalDateTime.parse(dateTimeStr, formatter); |
| 68 | + return Date.from(localDateTime.atZone( ZoneId.systemDefault()).toInstant()); |
| 69 | + } |
| 70 | + |
| 71 | + |
| 72 | +} |
0 commit comments