302. Java Stream API - 提取最大值与最小值详解
2026/4/20 8:38:37 网站建设 项目流程

文章目录

  • 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()异常处理值类型流必须非空

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询