news 2026/6/25 2:53:08

302. Java Stream API - 提取最大值与最小值详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
302. Java Stream API - 提取最大值与最小值详解

文章目录

  • 302. Java Stream API - 提取最大值与最小值详解
    • ✅ 为什么要学习 max/min 操作?
    • 🔢 针对数字流的 max/min/average
      • 📌 示例:处理数字流
        • ✅ 注意:
    • 🧱 针对对象流(Stream<T>)的 max/min
      • 📌 与数值流不同:
      • 🎬 示例:找出最长的字符串
        • 输出:
    • 🧨 可选值(Optional)如何安全处理?
      • ⚠️ 如果直接使用 `get()` 或 `orElseThrow()`:
    • 💬 课堂演示建议
    • 🧪 练习建议(课堂互动):
    • 🧾 总结

302. Java Stream API - 提取最大值与最小值详解


✅ 为什么要学习 max/min 操作?

在实际开发中,我们经常需要找出:

  • 最长的字符串
  • 最大的数字
  • 最小的价格
  • 评分最高的对象

Stream API 提供了非常直观的方法来实现这些需求。


🔢 针对数字流的 max/min/average

当我们处理的是数值类型的专用流(如IntStreamLongStreamDoubleStream),可以直接使用:

  • max()
  • min()
  • average()

这些方法都返回一个Optional 类型,因为:

🧠 它们没有 identity 元素—— 意思是,如果流为空,就无法计算结果。

📌 示例:处理数字流

IntStreamnumbers=IntStream.of(3,5,8,1,9);intmax=numbers.max().orElseThrow();System.out.println("最大值: "+max);
✅ 注意:

如果你使用的是空流,比如IntStream.empty().max()OptionalInt就会是空的,调用orElseThrow()会抛出NoSuchElementException


🧱 针对对象流(Stream)的 max/min

📌 与数值流不同:

对象流中的元素可以是任何类型(如StringUserOrder等),所以必须提供一个比较器 Comparator才能进行比较。

🎬 示例:找出最长的字符串

Stream<String>strings=Stream.of("one","two","three","four");Stringlongest=strings.max(Comparator.comparing(String::length)).orElseThrow();// 👈 保证流不为空才调用System.out.println("最长字符串是: "+longest);
输出:
最长字符串是:three

🧨 可选值(Optional)如何安全处理?

在使用max()min()average()后,返回的都是Optional类型:

  • Optional<T>(对象流)
  • OptionalIntOptionalDoubleOptionalLong(数值流)

⚠️ 如果直接使用get()orElseThrow()

请确保你的流不为空

否则你可能会遇到可怕的异常:

NoSuchElementException

💬 课堂演示建议

场景示例使用方法
数值最大值IntStream.of(1, 2, 3).max()无需 Comparator
最长字符串Stream.of("a", "bb").max(Comparator.comparing(String::length))需要 Comparator
平均值DoubleStream.of(3.0, 5.0).average()返回OptionalDouble
空流防御orElse(默认值)/ifPresent()/isPresent()避免抛异常

🧪 练习建议(课堂互动):

recordProduct(Stringname,doubleprice){}Stream<Product>products=Stream.of(newProduct("A",15.0),newProduct("B",25.0),newProduct("C",10.0));// 找出最贵的产品ProductmostExpensive=products.max(Comparator.comparing(Product::price)).orElseThrow();System.out.println("最贵的产品是: "+mostExpensive);

🧾 总结

方法用途返回类型说明
max(Comparator)获取最大元素Optional<T>对象流
min(Comparator)获取最小元素Optional<T>对象流
IntStream.max()获取最大 int 值OptionalInt基本类型
average()计算平均值OptionalDouble也可能为空
orElse()设置默认值值类型安全方式
orElseThrow()异常处理值类型流必须非空
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 19:49:36

解锁3个隐藏下载引擎:云存储加速工具实测指南

解锁3个隐藏下载引擎&#xff1a;云存储加速工具实测指南 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 还在为云存储下载速度过慢而困扰&#xff1f;本文将探索一款本地解析…

作者头像 李华
网站建设 2026/6/13 11:44:17

开源大模型新选择:BERT中文语义填空服务部署全攻略

开源大模型新选择&#xff1a;BERT中文语义填空服务部署全攻略 1. 什么是BERT智能语义填空服务 你有没有遇到过这样的场景&#xff1a;写文案时卡在某个成语中间&#xff0c;想不起后两个字&#xff1b;审校材料发现句子语法别扭&#xff0c;却说不清问题在哪&#xff1b;教孩…

作者头像 李华
网站建设 2026/6/12 22:01:51

解锁百度网盘下载速度的秘诀:无需会员也能畅享极速体验

解锁百度网盘下载速度的秘诀&#xff1a;无需会员也能畅享极速体验 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 还在忍受百度网盘几十KB的龟速下载吗&#xff1f;作为每天需…

作者头像 李华
网站建设 2026/6/12 23:34:32

YOLOv13官版镜像来了!支持Flash Attention加速

YOLOv13官版镜像来了&#xff01;支持Flash Attention加速 在目标检测工程落地的现实场景中&#xff0c;一个反复出现的瓶颈始终未被彻底解决&#xff1a;为什么模型在论文里跑出SOTA&#xff0c;在实验室里效果惊艳&#xff0c;一到实际部署环节就卡在环境配置、显存溢出、注…

作者头像 李华
网站建设 2026/6/24 20:00:08

还在为模组管理抓狂?这款工具让你秒变大神

还在为模组管理抓狂&#xff1f;这款工具让你秒变大神 【免费下载链接】Scarab An installer for Hollow Knight mods written in Avalonia. 项目地址: https://gitcode.com/gh_mirrors/sc/Scarab 还在为《空洞骑士》模组安装的复杂流程而头疼吗&#xff1f;当你在游戏社…

作者头像 李华