注:转载请注明出处!!!

这里直接用取出多个对象中某个值 最大/最小 来进行举例

直接看代码

 /**
* 时间测试类
*/
class TimeTest {
private Date time; public Date getTime() {
return time;
} public void setTime(Date time) {
this.time = time;
}
}

工具类:

 public class DateUtils extends org.apache.commons.lang.time.DateUtils{
//自定义日期格式
public static final String SIMPLE_DATEFORMAT = "yyyy-MM-dd HH:mm:ss"; public static final String SIMPLE_DATEFORMAT_YMD = "yyyy-MM-dd";
//日期比较方法
public static int compareDate(Date first, Date second){
return first.compareTo(second);
}
//日期转string
public static String formatDateYMDHMS(Date date){
if(date==null){
return null;
}
return format(date,SIMPLE_DATEFORMAT);
}
//通用格式化
public static String format(Date date, String pattern) {
if (date == null) {
return null;
}
SimpleDateFormat format = new SimpleDateFormat(pattern);
return format.format(date);
}
}

运行:

 public static void main(String[] args) {
int i = 0;
List<TimeTest> timeList = new ArrayList<>();
while (++i <= 5) {
TimeTest time = new TimeTest();
time.setTime(DateUtils.addMonths(DateUtils.now(), i));
timeList.add(time);
}
//插入一个空值
TimeTest time = new TimeTest();
timeList.add(time);
System.out.println("---------------初始值------------------");
timeList.forEach(o -> {
System.out.println(DateUtils.formatDateYMDHMS(o.getTime()));
});
System.out.println("---------------------------------------");
//下面有两种写法 推荐使用方法一
//代码解释: 将timeList流首先过滤时间不为空的,将需要比较的值转出map然后去重,最后取出最大值/最小值
//方法一 min(DateUtils::compareDate) 这种写法需要自己写工具类,且compareDate必须是static修饰
Date min = timeList.stream().filter(o -> o.getTime() != null).map(TimeTest::getTime).distinct().min(DateUtils::compareDate).get();
//方法二 max((e1, e2) -> e1.compareTo(e2))这种写法需要类里面含有比较方法
Date max = timeList.stream().filter(o -> o.getTime() != null).map(TimeTest::getTime).distinct().max((e1, e2) -> e1.compareTo(e2)).get();
System.out.println("min=" + DateUtils.formatDateYMDHMS(min));
System.out.println("max=" + DateUtils.formatDateYMDHMS(max));
}

输出:

 ---------------初始值------------------
2019-09-09 14:35:53
2019-10-09 14:35:53
2019-11-09 14:35:53
2019-12-09 14:35:53
2020-01-09 14:35:53
null
---------------------------------------
min=2019-09-09 14:35:53
max=2020-01-09 14:35:53 Process finished with exit code 0

java8 stream取出 最大值/最小值的更多相关文章

  1. js 数组取出最大值最小值和平均值的方法

    1.直接遍历数组 ,,,,,,,]; ]; ;i<arr.length;i++){ if(max<arr[i]) max=arr[i]; } 2.借用Math的方法 ,,,,,,,]; v ...

  2. 使用Java Stream,提取集合中的某一列/按条件过滤集合/求和/最大值/最小值/平均值

    不得不说,使用Java Stream操作集合实在是太好用了,不过最近在观察生产环境错误日志时,发现偶尔会出现以下2个异常: java.lang.NullPointerException java.ut ...

  3. java8 Stream的实现原理 (从零开始实现一个stream流)

    1.Stream 流的介绍 1.1 java8 stream介绍 java8新增了stream流的特性,能够让用户以函数式的方式.更为简单的操纵集合等数据结构,并实现了用户无感知的并行计算. 1.2  ...

  4. Java8 Stream新特性详解及实战

    Java8 Stream新特性详解及实战 背景介绍 在阅读Spring Boot源代码时,发现Java 8的新特性已经被广泛使用,如果再不学习Java8的新特性并灵活应用,你可能真的要out了.为此, ...

  5. Java8 Stream流

    第三章 Stream流 <Java8 Stream编码实战>的代码全部在https://github.com/yu-linfeng/BlogRepositories/tree/master ...

  6. 简洁又快速地处理集合——Java8 Stream(下)

    上一篇文章我讲解 Stream 流的基本原理,以及它与集合的区别关系,讲了那么多抽象的,本篇文章我们开始实战,讲解流的各个方法以及各种操作 没有看过上篇文章的可以先点击进去学习一下 简洁又快速地处理集 ...

  7. 简洁又快速地处理集合——Java8 Stream(上)

    Java 8 发布至今也已经好几年过去,如今 Java 也已经向 11 迈去,但是 Java 8 作出的改变可以说是革命性的,影响足够深远,学习 Java 8 应该是 Java 开发者的必修课. 今天 ...

  8. 【转】Java8 Stream 流详解

      当我第一次阅读 Java8 中的 Stream API 时,说实话,我非常困惑,因为它的名字听起来与 Java I0 框架中的 InputStream 和 OutputStream 非常类似.但是 ...

  9. C# 求链表 list 中 属性的 最大值 最小值

    获取链表List中对象属性最大值最小值(Max,Min)的方法: 1.创建一个类,类中有一个属性A /// <summary> /// 用于测试属性的类 /// </summary& ...

随机推荐

  1. gdb命令小结

    GDB命令小结 gdb <filename> : 调试指定程序文件 r : run 的简写,运行被调试程序, 如果此前没有下过断点,则执行完整个程序:如果有断点, 则程序暂停在第一个可用断 ...

  2. Electron开发使用Vue Devtools

    转自 [https://orchidflower.oschina.io/2017/03/29/Using-Vue-Devtools-in-Electron/] 2.2 安装步骤 首先在Chrome中安 ...

  3. [转] C++ 的关键字(保留字)完整介绍

    转载至:https://www.runoob.com/w3cnote/cpp-keyword-intro.html 1. asm asm (指令字符串):允许在 C++ 程序中嵌入汇编代码. 2. a ...

  4. ROM和RAM的内存详细说明

    1.首先是ROM 的读取是需要提前两个地址的读取,所以要想读取0地址的数据,你需要给地址是2 2.关于宽度,深度的计算 假设我们要存取如下取模的数据,该模的设置口语描述为:这是显示的2个字节,其中一个 ...

  5. #383 Div1 Problem B Arpa's weak amphitheater.... (分组背包 && 并查集)

    题意 : 有n个人,每个人都有颜值bi与体重wi.剧场的容量为W.有m条关系,xi与yi表示xi和yi是好朋友,在一个小组. 每个小组要么全部参加舞会,要么参加人数不能超过1人. 问保证总重量不超过W ...

  6. mpv播放器键盘快捷键

    作为个人认为最好用的播放器之一的MPV播放器,其开源,体积小,支持的格式多样等等非常优秀的功能.但其中也有部分麻烦的地方,因为功能太过强大,导致不知道某些功能的快捷键是什么,这就非常需要一个可以查阅的 ...

  7. JavaScript的事件队列(Event Queue)---宏任务和微任务

    前言 在写代码的时候经常思考一个问题,到底是那个函数先执行,本身JavaScript是一门单线程的语言,意思就是按照顺序执行.但是加入一些setTimeout和promise的函数来又实现了异步操作, ...

  8. linux-解决添加的网卡无法识别的问题(转载)

    添加网卡之后,网卡无法被正确的识别和使用排错方法查看/etc/udev/rules.d/70-persistent-net.rules的内容,该文件中可以查看到新添加的网卡的MAC地址修改/etc/s ...

  9. python之新式类与经典类

    经典类与新式类 经典类:P 或 P()--深度查找,向上查父节点 新式类 :P(object)---广度查找,继承object,新式类的方法较多  

  10. 《Effective Java》读书笔记 - 5.泛型

    Chapter 5 Generics Item 23: Don't use raw types in new code 虽然你可以把一个List<String>传给一个List类型(raw ...