You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何遍历三个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
}

逻辑说明

  1. Stream.of()把三个参数转为流,统一处理所有输入
  2. filter(Objects::nonNull)直接剔除null参数,不用单独判断每个参数的空值情况
  3. max()方法通过年龄比较器自动找出年龄最大的Person,返回Optional<Person>
  4. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 00:25:51