最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
怎样用 Java Stream 获取身高最矮者的姓名
时间:2026-06-17 08:18:52 编辑:袖梨 来源:一聚教程网
本文详解如何利用 Java Stream 的 min() 方法结合 Comparator.comparing(),从 Person 对象列表中精准提取身高最小者的名字,避免手动遍历,并处理空列表异常。
本文详解如何利用 java stream 的 `min()` 方法结合 `comparator.comparing()`,从 person 对象列表中精准提取身高最小者的名字,避免手动遍历,并处理空列表异常。
在 Java 中,Stream API 提供了声明式、函数式的数据处理能力。针对“获取身高最矮的 Person 的姓名”这一需求,核心思路不是先求最小高度值,而是直接对 Person 对象按 height 属性排序并取最小元素,再提取其 name 字段。
关键在于使用 Stream.min(Comparator) —— 它返回一个 Optional<T>,代表流中按给定比较器最小的元素。配合 Comparator.comparing(Person::height) 可简洁地按 height 升序比较;随后通过 orElse(...) 安全处理空列表(根据题设,空输入应抛出异常,但示例代码中 test 方法捕获了 IllegalArgumentException,因此实际生产中建议显式校验,此处为兼容原题逻辑,采用 orElse 提供默认对象):
static String shortestPerson(List<Person> ps) { if (ps == null || ps.isEmpty()) { throw new IllegalArgumentException("List cannot be null or empty"); } return ps.stream() .min(Comparator.comparing(Person::height)) .orElseThrow(() -> new IllegalArgumentException("No person found")) .name();}
✅ 推荐写法说明:
- 使用 orElseThrow() 替代 orElse(new Person(...)) 更符合语义——空列表本应报错,而非伪造数据;
- 显式判空提升健壮性,避免 NoSuchElementException 隐蔽发生;
- Person::height 是方法引用,等价于 p -> p.height(),简洁且高效。
对比常见误区:
❌ 错误做法:先用 mapToInt(Person::height).min() 得到 OptionalInt,再遍历原列表匹配——效率低、代码冗长、易出错;
✅ 正确范式:一次流操作完成“查找+提取”,语义清晰、性能最优。
最后提醒:record Person(String name, int height) 天然支持不可变性和透明属性访问,p.name 可直接调用,无需 getter;确保 JDK 版本 ≥ 14(启用 records)且编译参数正确配置。
立即学习“Java免费学习笔记(深入)”;
相关文章
- 《艾尔登法环:黑夜君临》追踪者游玩攻略 07-31
- 望月官网位置 望月官网地址分享 07-31
- 望月线下测试资格如何获取 望月线下测试资格获取方式 07-31
- 崩坏星穹铁道4.3更新了哪些 崩铁4.3版本更新公告 07-31
- 金铲铲之战5月29日更新公告 金铲铲之战17.4版本更新全部内容 07-31
- 和平精英全职高手皮肤价格多少 和平精英全职高手皮肤获取攻略 07-31