如何使用Java Streams获取身高最矮Person对象的姓名
解决方法
直接通过Java Stream的min方法结合比较器找到身高最矮的Person,再提取姓名即可,完全符合你的要求(不使用for/while/if,空列表抛异常):
static String shortestPerson(List<Person> ps) { return ps.stream() .min(Comparator.comparingInt(Person::height)) .orElseThrow(IllegalArgumentException::new) .name(); }
代码说明:
ps.stream():将输入的List转换为Stream,开启流式处理.min(Comparator.comparingInt(Person::height)):使用Comparator.comparingInt生成基于身高的比较器,min方法会返回Stream中身高最小的Person,结果包装在Optional<Person>中(用来处理空列表的情况).orElseThrow(IllegalArgumentException::new):如果Stream为空(即输入列表是空的),直接抛出IllegalArgumentException,满足题目要求.name():从找到的最矮Person对象中提取姓名,返回String类型
注意点:
不要先调用map(Person::name),因为这样会提前把Person对象转换成姓名字符串,丢失了身高信息,无法进行身高比较。必须先找到对应的Person对象,再提取姓名。
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

