1 public class DateUtils extends org.apache.commons.lang.time.DateUtils{
 2     //自定义日期格式
 3     public static final String SIMPLE_DATEFORMAT = "yyyy-MM-dd HH:mm:ss";
 5     public static final String SIMPLE_DATEFORMAT_YMD = "yyyy-MM-dd";
 6     //日期比较方法
 7     public static int compareDate(Date first, Date second){
 8        return first.compareTo(second);
10     //日期转string
11    public static String formatDateYMDHMS(Date date){
12         if(date==null){
13             return null;
14         }
15         return format(date,SIMPLE_DATEFORMAT);
16     }
17     //通用格式化
18     public static String format(Date date, String pattern) {
19         if (date == null) {
20             return null;
21         }
22         SimpleDateFormat format = new SimpleDateFormat(pattern);
23         return format.format(date);
24     }
 1 public static void main(String[] args) {
 2         int i = 0;
 3         List<TimeTest> timeList = new ArrayList<>();
 4         while (++i <= 5) {
 5             TimeTest time = new TimeTest();
 6             time.setTime(DateUtils.addMonths(DateUtils.now(), i));
 7             timeList.add(time);
 9         //插入一个空值
10         TimeTest time = new TimeTest();
11         timeList.add(time);
12         System.out.println("---------------初始值------------------");
13         timeList.forEach(o -> {
14             System.out.println(DateUtils.formatDateYMDHMS(o.getTime()));
15         });
16         System.out.println("---------------------------------------");
17         //下面有两种写法 推荐使用方法一
18         //代码解释: 将timeList流首先过滤时间不为空的,将需要比较的值转出map然后去重,最后取出最大值/最小值
19         //方法一 min(DateUtils::compareDate)  这种写法需要自己写工具类,且compareDate必须是static修饰
20         Date min = timeList.stream().filter(o -> o.getTime() != null).map(TimeTest::getTime).distinct().min(DateUtils::compareDate).get();
21         //方法二 max((e1, e2) -> e1.compareTo(e2))这种写法需要类里面含有比较方法
22         Date max = timeList.stream().filter(o -> o.getTime() != null).map(TimeTest::getTime).distinct().max((e1, e2) -> e1.compareTo(e2)).get();
23         System.out.println("min=" + DateUtils.formatDateYMDHMS(min));
24         System.out.println("max=" + DateUtils.formatDateYMDHMS(max));
 1 ---------------初始值------------------
 2 2019-09-09 14:35:53
 3 2019-10-09 14:35:53
 4 2019-11-09 14:35:53
 5 2019-12-09 14:35:53
 6 2020-01-09 14:35:53
 7 null
 8 ---------------------------------------
 9 min=2019-09-09 14:35:53
10 max=2020-01-09 14:35:53
12 Process finished with exit code 0