java8stream取出最大值最小值
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
java8stream取出最⼤值最⼩值
注:转载请注明出处!!!
这⾥直接⽤取出多个对象中某个值最⼤/最⼩来进⾏举例
直接看代码
1/**
2 * 时间测试类
3*/
4class TimeTest {
5private Date time;
6
7public Date getTime() {
8return time;
9 }
10
11public void setTime(Date time) {
12this.time = time;
13 }
14 }
⼯具类:
1public class DateUtils extends ng.time.DateUtils{
2//⾃定义⽇期格式
3public static final String SIMPLE_DATEFORMAT = "yyyy-MM-dd HH:mm:ss";
4
5public static final String SIMPLE_DATEFORMAT_YMD = "yyyy-MM-dd";
6//⽇期⽐较⽅法
7public static int compareDate(Date first, Date second){
8return pareTo(second);
9 }
10//⽇期转string
11public static String formatDateYMDHMS(Date date){
12if(date==null){
13return null;
14 }
15return format(date,SIMPLE_DATEFORMAT);
16 }
17//通⽤格式化
18public static String format(Date date, String pattern) {
19if (date == null) {
20return null;
21 }
22 SimpleDateFormat format = new SimpleDateFormat(pattern);
23return format.format(date);
24 }
25 }
运⾏:
1public static void main(String[] args) {
2int i = 0;
3 List<TimeTest> timeList = new ArrayList<>();
4while (++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) -> pareTo(e2))这种写法需要类⾥⾯含有⽐较⽅法
22 Date max = timeList.stream().filter(o -> o.getTime() != null).map(TimeTest::getTime).distinct().max((e1, e2) -> pareTo(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
7null
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。