如何遍历三个Person参数找出最年长对象?需处理空值场景
最优实现方案:找出最年长的Person对象
针对你遇到的需求,完全不用写大量嵌套if-else,推荐两种简洁且易维护的实现方式:
方式一:Java 8+ Stream API实现(推荐)
利用Stream的过滤和最大值查找能力,一行核心逻辑搞定所有情况:
import java.util.Comparator; import java.util.Objects; import java.util.stream.Stream; public Person getOldest(Person personA, Person personB, Person personC) { return Stream.of(personA, personB, personC) .filter(Objects::nonNull) // 过滤掉所有null对象 .max(Comparator.comparingInt(Person::getAge)) // 按年龄找出最大的对象 .orElse(null); // 无有效对象时返回null }
逻辑说明
Stream.of()把三个参数转为流,统一处理所有输入filter(Objects::nonNull)直接剔除null参数,不用单独判断每个参数的空值情况max()方法通过年龄比较器自动找出年龄最大的Person,返回Optional<Person>orElse(null)处理全null的场景,直接返回null
方式二:Java 8之前版本兼容实现
如果项目还在使用Java 8之前的版本,可以用集合遍历的方式,同样避免嵌套分支:
import java.util.Arrays; import java.util.List; public Person getOldest(Person personA, Person personB, Person personC) { Person oldest = null; List<Person> persons = Arrays.asList(personA, personB, personC); for (Person p : persons) { if (p != null) { // 首次遇到非空对象,或者当前对象年龄更大时更新最年长者 if (oldest == null || p.getAge() > oldest.getAge()) { oldest = p; } } } return oldest; }
优势对比
相比嵌套if-else的实现,这两种方式的好处:
- 可读性高:逻辑清晰,不用拆解各种空值组合的分支
- 扩展性强:如果后续需要增加参数(比如第四个Person),只需在集合/流里新增参数即可,无需修改核心判断逻辑
- 减少重复代码:避免了大量重复的
if (xx != null)和年龄比较代码
内容的提问来源于stack exchange,提问作者NoobCoder
相关产品推荐
相关产品推荐

