news 2026/6/10 14:09:41

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/10 12:13:06

Cute_Animal_For_Kids_Qwen镜像实战:修改提示词生成指定动物

Cute_Animal_For_Kids_Qwen镜像实战&#xff1a;修改提示词生成指定动物 你有没有试过&#xff0c;孩子指着绘本里的小兔子说“我也想要一只会跳舞的粉鼻子兔子”&#xff0c;结果你翻遍图库都找不到那张“刚刚好”的图&#xff1f;或者美术老师想为低龄班准备一套统一风格的动…

作者头像 李华
网站建设 2026/6/10 12:13:06

科研项目管理工具:离线录入维护全搞定

谁懂啊&#xff01;做科研项目管理时&#xff0c;要么用的在线工具动不动卡壳&#xff0c;要么付费软件功能冗余用不上&#xff0c;真心折腾。 下载地址&#xff1a;https://pan.quark.cn/s/64a84a09fe61 备用地址&#xff1a;https://pan.baidu.com/s/1A_y7igL-gYgdDlgtgEQe…

作者头像 李华
网站建设 2026/6/10 12:12:02

通义千问3-14B环境部署:从Ollama安装到首次调用详细步骤

通义千问3-14B环境部署&#xff1a;从Ollama安装到首次调用详细步骤 1. 为什么选Qwen3-14B&#xff1f;单卡跑出30B级效果的实用派选手 你是不是也遇到过这些情况&#xff1a;想用大模型做长文档分析&#xff0c;但Qwen2-72B显存爆满&#xff1b;想部署本地AI助手&#xff0c…

作者头像 李华
网站建设 2026/6/6 5:07:20

告别语言壁垒:XUnity自动翻译器让游戏本地化变得简单

告别语言壁垒&#xff1a;XUnity自动翻译器让游戏本地化变得简单 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 还在为外语游戏中的对话和菜单发愁吗&#xff1f;语言障碍是否让你错失了众多优秀的独立游…

作者头像 李华
网站建设 2026/5/20 18:45:23

基于S7-300 PLC和组态王配料饲料加工控制系统

基于S7-300 PLC和组态王配料饲料加工控制系统 凌晨三点的饲料加工车间&#xff0c;传送带突然卡顿&#xff0c;操作员老王盯着监控屏上的红色报警直挠头。这种场景在传统人工配料的工厂里太常见了&#xff0c;直到我们给产线装上了基于S7-300 PLC和组态王的自动控制系统——现…

作者头像 李华
网站建设 2026/5/30 23:57:49

3步实现百度网盘链接高效解析:突破下载限制的完整指南

3步实现百度网盘链接高效解析&#xff1a;突破下载限制的完整指南 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 你是否也曾遇到这样的困扰&#xff1f;面对百度网盘分享链接…

作者头像 李华