Linux基础命令(系统信息类)
2026/4/20 8:38:22
在实际开发中,我们经常需要找出:
Stream API 提供了非常直观的方法来实现这些需求。
当我们处理的是数值类型的专用流(如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。
对象流中的元素可以是任何类型(如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在使用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() | 异常处理 | 值类型 | 流必须非空 |