注:轉載請注明出處!!!
這里直接用取出多個對象中某個值 最大/最小 來進行舉例
直接看代碼
1 /** 2 * 時間測試類 3 */ 4 class TimeTest { 5 private Date time; 6 7 public Date getTime() { 8 return time; 9 } 10 11 public void setTime(Date time) { 12 this.time = time; 13 } 14 }
工具類:
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"; 4 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); 9 } 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 } 25 }
運行:
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); 8 } 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)); 25 }
輸出:
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 11 12 Process finished with exit code 0