Java 8 Stream API问题:如何将映射后的null替换为指定提示字符串
解决Stream映射时替换null为指定字符串的问题
这问题我之前处理过,其实有好几种简洁的解决思路,下面给你一一说明:
方法一:使用Map的getOrDefault(最推荐)
这是最直接高效的方式,getOrDefault方法本身就是为这种"找不到key时返回默认值"的场景设计的,代码非常简洁:
List<String> result = myList.stream() .map(i -> myMap.getOrDefault(i, "Map does not contain such key")) .collect(Collectors.toList());
它的逻辑很简单:给指定的keyi,如果Map里存在就返回对应的值,不存在就返回你传入的默认字符串,完美替代null。
方法二:用Optional处理空值
如果你需要在空值处理前后做更多逻辑,或者习惯用Optional的链式调用,也可以用这种方式:
List<String> result = myList.stream() .map(myMap::get) // 先获取Map中的值,可能为null .map(val -> Optional.ofNullable(val).orElse("Map does not contain such key")) .collect(Collectors.toList());
Optional.ofNullable(val)会把可能为null的值包装成Optional对象,orElse方法则在值为空时返回你指定的默认字符串。
方法三:三元运算符判断(最直观)
如果是刚接触Stream的朋友,用三元运算符判断null会更易懂:
List<String> result = myList.stream() .map(i -> { String val = myMap.get(i); return val != null ? val : "Map does not contain such key"; }) .collect(Collectors.toList());
先获取对应的值,然后判断是否为null,非null就返回原值,否则返回默认字符串,逻辑一目了然。
总结一下,方法一的getOrDefault是最优解,因为它是Map原生方法,代码简洁且性能最好,专门适配这种场景。
内容的提问来源于stack exchange,提问作者IceTeaGreen
相关产品推荐
相关产品推荐

