news 2026/10/15 19:48:49

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

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

  • 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

📌 与数值流不同:

对象流中的元素可以是任何类型(如String、User、Order等),所以必须提供一个比较器 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>(对象流)
  • OptionalInt、OptionalDouble、OptionalLong(数值流)

⚠️ 如果直接使用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/10/11 3:17:00

告别复杂配置!Emotion2Vec+ Large语音情感系统一键启动指南

告别复杂配置&#xff01;Emotion2Vec Large语音情感系统一键启动指南 1. 为什么你需要这个语音情感识别系统&#xff1f; 你是否遇到过这些场景&#xff1a; 客服质检团队每天要听上百通录音&#xff0c;靠人工判断客户情绪&#xff0c;效率低、主观性强、易疲劳&#xff1…

作者头像 李华
网站建设 2026/10/15 14:45:00

MinerU 2.5-1.2B生产环境部署:稳定性压测数据分享

MinerU 2.5-1.2B生产环境部署&#xff1a;稳定性压测数据分享 1. 这不是普通PDF提取工具&#xff0c;而是专为复杂文档设计的“结构化翻译器” 你有没有遇到过这样的场景&#xff1a;一份技术白皮书里混着三栏排版、嵌套表格、手写公式扫描件和矢量图&#xff0c;用传统OCR一…

作者头像 李华
网站建设 2026/10/15 16:16:10

3个黑科技让外语游戏秒变母语体验:XUnity自动翻译器全攻略

3个黑科技让外语游戏秒变母语体验&#xff1a;XUnity自动翻译器全攻略 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 当你在《塞尔达传说》中面对古老神庙的谜题提示&#xff0c;却因日语说明一头雾水&a…

作者头像 李华
网站建设 2026/10/15 16:27:29

如何用3个秘诀彻底解决B站视频下载去水印难题

如何用3个秘诀彻底解决B站视频下载去水印难题 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去水印等&#xff09;。 项目地址…

作者头像 李华