使用Java Optional时如何为空值或空字符串设置默认值
问题根因
Optional.ofNullable() 仅会对 null 值做判断,你代码里的空字符串 "" 属于合法的非null对象,所以不会触发 orElse() 的默认值逻辑:
你传入的emp对象本身非null,调用getName()返回的空字符串也非null,最终直接返回了空字符串,默认值自然不生效。
修复方案
在map取值后增加filter过滤空值(包含空字符串、全空格字符串)即可,修改后的核心逻辑如下:
String value = Optional.ofNullable(emp) .map(Emp::getName) // 过滤空字符串、全空格字符串,JDK8环境可替换为 !name.isEmpty() .filter(name -> !name.isBlank()) .orElse("Mark");
完整可运行代码
import java.util.Optional; public class Test { public static void main(String[] args) { String str = ""; Emp emp = new Emp(); emp.setName(str); String value = Optional.ofNullable(emp) .map(Emp::getName) .filter(name -> !name.isBlank()) .orElse("Mark"); System.out.println(value); // 输出Mark } } class Emp { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
内容的提问来源于stack exchange,提问作者Pavan
相关产品推荐
相关产品推荐

