Java 8集合流使用及基于Stream/Lambda改写年龄判断代码求助
用Java 8 Streams/Lambda改写年龄检查方法的正确姿势
嘿,作为Java 8新手,能主动尝试用Stream和Lambda重构代码已经超棒啦!先帮你梳理下原方法的核心逻辑:遍历Person列表,只要找到任意一个年龄大于指定值的对象就返回true,遍历完都没找到就返回false。
你自己的思路方向是对的,但其实有更简洁且贴合需求的写法——直接用Stream的anyMatch()方法,它专门用来判断流中是否存在至少一个元素满足给定条件,而且会像原for循环一样短路求值(找到第一个符合条件的元素就停止遍历,效率和原代码完全一致)。
最终优化后的代码
public boolean checkPersonAboveAge(List<Person> persons, int age) { return persons.stream() .anyMatch(p -> p.getAge() > age); }
补充:修正你自己的尝试代码
如果想继续用你一开始的filter()+findAny()思路,也可以调整成这样(利用Optional.isPresent()判断是否找到符合条件的元素):
public boolean checkPersonAboveAge(List<Person> persons, int age) { return persons.stream() .filter(p -> p.getAge() > age) .findAny() .isPresent(); }
小提示
实际开发中,建议给Person类的age字段加上private修饰,然后提供getAge() getter方法(就像上面代码里写的那样),这更符合Java的封装规范哦~
内容的提问来源于stack exchange,提问作者opuser1
相关产品推荐
相关产品推荐

