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

如何用Java 8 Stream与Optional单语句实现多字段非空打印?

Java 7空值校验转Java 8现代写法优化

问题场景

原Java 7空值校验代码:

if (person != null) {
  System.out.println(person.getName());
  System.out.println(person.getAge());
}

已尝试但存在重复逻辑的写法:

Optional.ofNullable(person).map(Person::getName).ifPresent(System.out::println);
Optional.ofNullable(person).map(Person::getAge).ifPresent(System.out::println);

需求:用单个语句实现两个属性的打印,避免重复的空值校验逻辑。

解决方案

方案1:直接用Optional的ifPresent执行多操作

这是最简洁且符合Optional设计意图的方式,无需Stream:

Optional.ofNullable(person)
        .ifPresent(p -> {
            System.out.println(p.getName());
            System.out.println(p.getAge());
        });

方案2:用Stream管道处理属性流

如果一定要使用Stream,可以将目标属性包装成Stream后统一消费:

Stream.ofNullable(person)
      .flatMap(p -> Stream.of(p.getName(), String.valueOf(p.getAge())))
      .forEach(System.out::println);

若getAge()返回的是字符串类型,可简化为:

Stream.ofNullable(person)
      .flatMap(p -> Stream.of(p.getName(), p.getAge()))
      .forEach(System.out::println);

内容的提问来源于stack exchange,提问作者purbarunc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 20:24:54