如何用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
相关产品推荐
相关产品推荐

