java8 stream取出 最大值/最小值


注:轉載請注明出處!!!

這里直接用取出多個對象中某個值 最大/最小 來進行舉例

直接看代碼

 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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM