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& ...
随机推荐
- Docker报错解决
今天我在学习docker的时候,用docker安装nginx的时候报了如下错误: 尝试了卸载docker重装,删除nginx,删除nginx镜像文件都没有用,最后发现还是Linux和docker版本兼 ...
- golang初识 和 变量,常量,iota
目录 一.go语言与python 1. go语言 2. python 二.变量相关 1. go语言的基本语法 2. 标识符和关键字 3. 变量声明 (1)声明变量时未指定初始值 (2)声明变量时指定初 ...
- 【leetcode】Valid Triangle Number
题目: Given an array consists of non-negative integers, your task is to count the number of triplets c ...
- C#与JAVA的互通
C#与JAVA的互通 https://blog.csdn.net/sinat_35165183/article/details/68936910
- html abbr标签 语法
html abbr标签 语法 作用:标记一个缩写 大理石平台 说明:<abbr> 标签指示简称或缩写,比如 "WWW" 或 "NATO".通过对缩写 ...
- 【深入理解CLR】2:细谈值类型的装箱和拆箱
装箱 总所周知,值类型是比引用类型更“轻型”的一种类型,因为它们不作为对象在托管堆中分配,不会被垃圾回收,也不通过指针来引用.但在许多情况下,都需要获取对值类型的一个实例的引用.例如,假定要创建一个A ...
- 树状数组(Binary Indexed Tree)
树状数组(Binary Indexed Tree,BIT) 是能够完成下述操作的数据结构. 给一个初始值全为 0 的数列 a1, a2, ..., an (1)给定 i,计算 a1+a2+...+ai ...
- latex beamer技巧
%章节标题\section{Related work(LSH)} %开始一页ppt \begin{frame}{Related work}{} \partitle{Locality-Sensitive ...
- 02-scrapy的cmdline命令
1.启动爬虫的命令为: scrapy crawl spidername(爬虫名) 2.我们还可以通过下述方式来启动爬虫 步骤一:创建一个.py文件.startspider.py(这里文件的名称可以自己 ...
- MySQL的(@i:=@i+1)用处及用法
今天写一个为查询的数据排序列号的SQL语句,整理出来下面的笔记: 这是语法: SELECT (@i:=@i+1),t.* FROM table_name t,(SELECT @i:=0) AS j ...