【Java 8 新特性】Java Stream 通过min和max方法获取列表最小值和最大值

  • 1.Stream.min()
  • 2.Stream.max()
  • 3.在字符串(`String`)和整数(`Integer`)中如何使用min和max方法
  • 4.在对象类型(`Object`)中使用Min和Max方法
  • 5.在日期类型(`Date`)中使用Min和Max方法
  • 6.使用IntStream, LongStream and DoubleStream
  • 参考文献

本页将介绍 Stream.minStream.max示例。

java.util.stream.Stream已经在java8中引入。

使用Stream.min方法,我们得到给定比较器的流的最小元素。

使用Stream.max方法,我们得到了给定比较器的流的最大元素。

minmax方法都是流终端操作。

让我们用例子来讨论min和max方法。

1.Stream.min()

它根据提供的比较器(Comparator)返回此流的最小元素。这是一种获取流元素中最小值简写的方法,例如使用Stream.reduce方法。

在javadoc中min方法声明

Optional<T> min(Comparator<? super T> comparator)

参数:传递比较器(Comparator)来比较元素。
返回:该方法返回提供最小元素或为空的选择。
异常:如果最小值为null,则该方法抛出NullPointerException。

2.Stream.max()

它根据提供的比较器(Comparator)返回此流的最大元素。这是一种获取流元素中最大值简写的方法,例如使用Stream.reduce方法。

在javadoc中max方法声明

Optional<T> max(Comparator<? super T> comparator)

参数:传递比较器(Comparator)来比较元素。
返回:该方法返回提供最大元素或为空的选择。
异常:如果最大值为null,则该方法抛出NullPointerException。

3.在字符串(String)和整数(Integer)中如何使用min和max方法

下面是在字符串流和整数流中获取最小值和最大值的示例

MinMaxDemo1.java

package com.concretepage;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
public class MinMaxDemo1 {public static void main(String[] args) {System.out.println("---Min and Max for Integer---");List<Integer> numList = Arrays.asList(42, 44, 43, 41);Comparator<Integer> comparator = Comparator.comparing(Integer::intValue);Optional<Integer> minOptional = numList.stream().min(comparator);minOptional.ifPresent(e -> System.out.println("Min: " + e));Optional<Integer> maxOptional = numList.stream().max(comparator);maxOptional.ifPresent(e -> System.out.println("Max: " + e));System.out.println("---Min and Max for String---");List<String> list = Arrays.asList("Mohit", "Nilesh", "Shankar", "Brajesh");list.stream().min(Comparator.comparing(String::valueOf)).ifPresent(e -> System.out.println("Min: " + e));list.stream().max(Comparator.comparing(String::valueOf)).ifPresent(e -> System.out.println("Max: " + e));}
}

输出

---Min and Max for Integer---
Min: 41
Max: 44
---Min and Max for String---
Min: Brajesh
Max: Shankar

我们知道min和max是流获取最大最小值的简写方法。让我们使用非简写的方式来获取最小值和最大值。

MinMaxDemoWithReduce.java

package com.concretepage;
import java.util.Arrays;
import java.util.List;
public class MinMaxDemoWithReduce {public static void main(String[] args) {System.out.println("---Min and Max for Integer---");List<Integer> numList = Arrays.asList(42, 44, 43, 41);//For minnumList.stream().reduce(Integer::min).ifPresent(s -> System.out.println(s)); //41//For maxnumList.stream().reduce(Integer::max).ifPresent(s -> System.out.println(s)); //44System.out.println("---Min and Max for String---");List<String> list = Arrays.asList("Mohit", "Nilesh", "Shankar", "Brajesh");//For minlist.stream().reduce((s1, s2) -> {if (s1.compareTo(s2) <= 0) {return s1;}return s2;}).ifPresent(s -> System.out.println(s)); //Brajesh//For maxlist.stream().reduce((s1, s2) -> {if (s1.compareTo(s2) >= 0) {return s1;}return s2;}).ifPresent(s -> System.out.println(s)); //Shankar       }
}

4.在对象类型(Object)中使用Min和Max方法

下面是在对象流中获取最小值和最大值的示例

MinMaxDemo2.java

package com.concretepage;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
public class MinMaxDemo2 {public static void main(String[] args) {List<User> users = Arrays.asList(new User("Mahesh", 30),new User("Krishna", 29),new User("Virat", 28));System.out.println("---Min and Max on the basis of user name---");users.stream().min(Comparator.comparing(u -> u.getUserName())).ifPresent(e -> System.out.println("Min: " + e.getUserName()));users.stream().max(Comparator.comparing(u -> u.getUserName())).ifPresent(e -> System.out.println("Max: " + e.getUserName()));  System.out.println("---Min and Max on the basis of age---");  users.stream().min(Comparator.comparing(User::getAge)).ifPresent(e -> System.out.println("Min: " + e.getUserName()));users.stream().max(Comparator.comparing(User::getAge)).ifPresent(e -> System.out.println("Max: " + e.getUserName()));}
}
class User {private String userName;private int age;public User(String userName, int age) {this.userName = userName;this.age = age;}//Sets and Gets
}

输出

---Min and Max on the basis of user name---
Min: Krishna
Max: Virat
---Min and Max on the basis of age---
Min: Virat
Max: Mahesh

5.在日期类型(Date)中使用Min和Max方法

下面是在日期流中获取最小值和最大值的示例

MinMaxDemo3.java

package com.concretepage;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
public class MinMaxDemo3 {public static void main(String[] args) {LocalDate ld = LocalDate.parse("2020-05-15");List<LocalDate> ldList = Arrays.asList(ld.minus(10, ChronoUnit.DAYS), //2020-05-05ld, //2020-05-15ld.plus(15, ChronoUnit.DAYS) //2020-05-30);ldList.stream().min(Comparator.comparing(LocalDate::toEpochDay)).ifPresent(e -> System.out.println("Min: " + e));ldList.stream().max(Comparator.comparing(LocalDate::toEpochDay)).ifPresent(e -> System.out.println("Max: " + e));}

输出

Min: 2020-05-05
Max: 2020-05-30

6.使用IntStream, LongStream and DoubleStream

找到IntStream、LongStream和DoubleStream的min和max方法在的Javadoc的声明。

For IntStream.

OptionalInt min()
OptionalInt max()

For LongStream.

OptionalLong min()
OptionalLong max()

For DoubleStream.

OptionalDouble min()
OptionalDouble max()

我们可以看到,在上述方法中,我们不需要通过比较器。

MinMaxDemo4.java

package com.concretepage;
import java.util.stream.DoubleStream;
import java.util.stream.IntStream;
import java.util.stream.LongStream;
public class MinMaxDemo4 {public static void main(String[] args) {System.out.println("--- Min and Max for IntStream ---");IntStream.of(12, 20, 35, 48).min().ifPresent(i -> System.out.println(i));IntStream.of(12, 20, 35, 48).max().ifPresent(i -> System.out.println(i));System.out.println("--- Min and Max for LongStream ---"); LongStream.of(200, 300, 400).min().ifPresent(l -> System.out.println(l));LongStream.of(200, 300, 400).max().ifPresent(l -> System.out.println(l));    System.out.println("--- Min and Max for DoubleStream ---");   DoubleStream.of(110.54, 230.57, 360.65).min().ifPresent(l -> System.out.println(l));DoubleStream.of(110.54, 230.57, 360.65).max().ifPresent(l -> System.out.println(l));  }
}

输出

--- Min and Max for IntStream ---
12
48
--- Min and Max for LongStream ---
200
400
--- Min and Max for DoubleStream ---
110.54
360.65

参考文献

【1】Java doc: Stream
【2】Java Stream min() and max()

【Java 8 新特性】Java Stream 通过min()和max()获取列表最小值和最大值相关推荐

  1. 跟我学 Java 8 新特性之 Stream 流基础体验

    转载自   跟我学 Java 8 新特性之 Stream 流基础体验 Java8新增的功能中,要数lambda表达式和流API最为重要了.这篇文章主要介绍流API的基础,也是流API系列的第一篇文章, ...

  2. 跟我学 Java 8 新特性之 Stream 流(二)关键知识点

    转载自   跟我学 Java 8 新特性之 Stream 流(二)关键知识点 我们的第一篇文章,主要是通过一个Demo,让大家体验了一下使用流API的那种酣畅淋漓的感觉.如果你没有实践,我还是再次呼吁 ...

  3. 跟我学 Java 8 新特性之 Stream 流(三)缩减操作

    转载自   跟我学 Java 8 新特性之 Stream 流(三)缩减操作 和前面两篇文章一起服用,效果会更佳.通过对流API的基础体验Demo和关键知识点的讲解,相信大家对流API都有一定的认识了, ...

  4. Java 8 新特性之Stream API

    1. 概述 1.1 简介 Java 8 中有两大最为重要的改革,第一个是 Lambda 表达式,另外一个则是 Stream API(java.util.stream.*). Stream 是 Java ...

  5. 跟我学 Java 8 新特性之 Stream 流(七)流与迭代器,流系列大结局

    转载自   跟我学 Java 8 新特性之 Stream 流(七)流与迭代器,流系列大结局 恭喜你们,马上就要学完Java8 Stream流的一整系列了,其实我相信Stream流对很多使用Java的同 ...

  6. 跟我学 Java 8 新特性之 Stream 流(六)收集

    转载自   跟我学 Java 8 新特性之 Stream 流(六)收集 我们前面的五篇文章基本都是在说将一个集合转成一个流,然后对流进行操作,其实这种操作是最多的,但有时候我们也是需要从流中收集起一些 ...

  7. 跟我学 Java 8 新特性之 Stream 流(四)并行流

    转载自   跟我学 Java 8 新特性之 Stream 流(四)并行流 随着对流API认识的慢慢深入,本章我们要讨论的知识点是流API里面的并行流了. 在开始讨论并行流之前,我先引发一下大家的思考, ...

  8. 跟我学 Java 8 新特性之 Stream 流(五)映射

    转载自   跟我学 Java 8 新特性之 Stream 流(五)映射 经过了前面四篇文章的学习,相信大家对Stream流已经是相当的熟悉了,同时也掌握了一些高级功能了,如果你之前有阅读过集合框架的基 ...

  9. Java 8 新特性之 Stream 流(五)映射

    经过了前面四篇文章的学习,相信大家对Stream流已经是相当的熟悉了,同时也掌握了一些高级功能了,如果你之前有阅读过集合框架的基石Collection接口,是不是在经过前面的学习,以前看不懂的东西,突 ...

  10. Java 8 新特性 宋红康跟学

    Java 8 新特性 Java 8 新特性简介 思维导图 并行流与串行流 Lambda表达式 Lambda 表达式语法 语法格式一:无参,无返回值,Lambda体只需一条语句 语法格式二:Lambda ...

最新文章

  1. vc++64位系统下long的长度为4个字节_64位系统究竟牛逼在哪里?
  2. java判断字符串中是否包含中文 过滤中文
  3. 【VS开发】Wix 安装教程
  4. Kafka入门经典教程【转】
  5. Android下检测网络连接 3G WIFI
  6. 【力扣】NO.13.罗马数字转整数
  7. java编写龟兔赛跑_java--龟兔赛跑模拟
  8. java 数据库编程(一)JDBC连接Sql Server数据库
  9. 7种超粗体字体(带有示例)
  10. Microsoft Visio-Microsoft Visio下载
  11. java代码定义窗口_代码窗口九种方式实现 javascripts 弹出对话框窗口代码
  12. Python:混合动力汽车能量管理_动态规划简版(1/2)
  13. Excel宏批量转置并删除空格
  14. 线性代数感悟之4 通过增广矩阵查看解的情况上篇
  15. 利器 | REST Assured 实践(二):断言实现
  16. Github删除历史提交记录的方法
  17. 浅析安全架构中遇到的问题
  18. python分块处理功能_Python自然语言处理学习笔记之信息提取步骤分块(chunking)...
  19. mysql类型转换及小数点保留问题(cast函数)
  20. jaeger 是很么软件_jaeger 使用初探

热门文章

  1. 职称计算机ppt2007易错题,职称计算机考试xcel2007模块难题通关技巧.doc
  2. printf二进制数据
  3. SpringBoot系列教程(六十七):SpringBoot自定义Fastjson为JSON消息转换器
  4. ERP 毛需求PAB初值净需求量计划产出量pab计划投入量 atp求法
  5. 1.list倒叙输出
  6. 找不到服务器或dsn错误,win7浏览网页提示“找不到服务器或DNS错误”原因及解决方法...
  7. PHPExcel出现 Formula Error的解决方案
  8. 使用diskpart命令修复损坏的U盘
  9. python制作贺卡代码_用python作元旦贺卡_用AI帮你画新年贺卡:只需输入几个单词,就能模仿大师名做......
  10. vue 批量下载图片并打包成zip包