java8 stream取出 最大值/最小值
注:转载请注明出处!!!
这里直接用取出多个对象中某个值 最大/最小 来进行举例
直接看代码
/**
* 时间测试类
*/
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取出 最大值/最小值的更多相关文章
- js 数组取出最大值最小值和平均值的方法
1.直接遍历数组 ,,,,,,,]; ]; ;i<arr.length;i++){ if(max<arr[i]) max=arr[i]; } 2.借用Math的方法 ,,,,,,,]; v ...
- 使用Java Stream,提取集合中的某一列/按条件过滤集合/求和/最大值/最小值/平均值
不得不说,使用Java Stream操作集合实在是太好用了,不过最近在观察生产环境错误日志时,发现偶尔会出现以下2个异常: java.lang.NullPointerException java.ut ...
- java8 Stream的实现原理 (从零开始实现一个stream流)
1.Stream 流的介绍 1.1 java8 stream介绍 java8新增了stream流的特性,能够让用户以函数式的方式.更为简单的操纵集合等数据结构,并实现了用户无感知的并行计算. 1.2 ...
- Java8 Stream新特性详解及实战
Java8 Stream新特性详解及实战 背景介绍 在阅读Spring Boot源代码时,发现Java 8的新特性已经被广泛使用,如果再不学习Java8的新特性并灵活应用,你可能真的要out了.为此, ...
- Java8 Stream流
第三章 Stream流 <Java8 Stream编码实战>的代码全部在https://github.com/yu-linfeng/BlogRepositories/tree/master ...
- 简洁又快速地处理集合——Java8 Stream(下)
上一篇文章我讲解 Stream 流的基本原理,以及它与集合的区别关系,讲了那么多抽象的,本篇文章我们开始实战,讲解流的各个方法以及各种操作 没有看过上篇文章的可以先点击进去学习一下 简洁又快速地处理集 ...
- 简洁又快速地处理集合——Java8 Stream(上)
Java 8 发布至今也已经好几年过去,如今 Java 也已经向 11 迈去,但是 Java 8 作出的改变可以说是革命性的,影响足够深远,学习 Java 8 应该是 Java 开发者的必修课. 今天 ...
- 【转】Java8 Stream 流详解
当我第一次阅读 Java8 中的 Stream API 时,说实话,我非常困惑,因为它的名字听起来与 Java I0 框架中的 InputStream 和 OutputStream 非常类似.但是 ...
- C# 求链表 list 中 属性的 最大值 最小值
获取链表List中对象属性最大值最小值(Max,Min)的方法: 1.创建一个类,类中有一个属性A /// <summary> /// 用于测试属性的类 /// </summary& ...
随机推荐
- Python修炼之路-异常
异常处理 在程序出现bug时一般不会将错误信息直接显示给用户,而是可以自定义显示内容或处理. 常见异常 AttributeError # 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性 ...
- anaconda历史版本下载
anaconda历史版本安装: anaconda所有版本链接:https://repo.continuum.io/archive/ 清华大学开源软件镜像站:https://mirrors.tuna.t ...
- “_MSC_VER”的不匹配项
近些年来vs更新步伐加快,深刻的感受到了技术成长学习的重要性. 另一方面,版本的更换,也带来了许多的问题.今天用2019打开以前2010的工程时就碰到了一个: 检测到“_MSC_VER”的不匹配项: ...
- $.param()序列化对象
1.$.param(): param() 方法创建数组或对象的序列化表示形式. 序列化的值可在生成 AJAX 请求时用于 URL 查询字符串中. 第一行是原始数据,第二行是序列化后的.$.param( ...
- CDOJ 1059 秋实大哥与小朋友 STL(set)+离散化+BIT区间更新单点查询
链接: A - 秋实大哥与小朋友 Time Limit:1000MS Memory Limit:65535KB 64bit IO Format:%lld & %llu Subm ...
- Java数据结构之排序---快速排序
快速排序是对冒泡排序的一种改进. 快速排序的基本思想: 假设我们以升序为例,它的执行流程可以概括为,每一趟选择当前所有子序列中的一个关键字(通常我们选择第一个,下述代码实现选择的也是第一个数)作为枢纽 ...
- Oracle--单实例数据库迁移到RAC集群服务器(RMAN)
单实例数据库版本:11.2.0.1 RAC实例数据库版本:11.2.0.3 1,在单实例数据库备份文件 RMAN> show all; using target database control ...
- 大数据笔记(二十四)——Scala面向对象编程实例
===================== Scala语言的面向对象编程 ======================== 一.面向对象的基本概念:把数据和操作数据的方法放到一起,作为一个整体(类 c ...
- Python 使用PyQt5进行开发(一)
Qt 是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架.它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器. 我们先简单使用Qt进行一个小工 ...
- acl权限设置
acl权限分配 1.setfacl设置文件或目录的权限 setfacl -m u:user:rw text setfacl -m user:rwx /mnt 2.getfacl查看文件或目录的权限 g ...