Java 8 Stream空值处理:如何排除title为null的Response对象
解决方案
可以通过在Stream中添加两层过滤逻辑解决问题:
- 先过滤流中本身为null的元素,避免强转时触发空指针异常
- 再过滤掉
title字段为null的Response对象,只保留符合业务要求的元素
修改后的代码如下:
import java.util.Objects; import java.util.stream.Collectors; // ... executeRequest(requestId).stream() .filter(Objects::nonNull) // 过滤流中的null元素 .map(d -> (Response) d) .filter(response -> Objects.nonNull(response.getTitle())) // 过滤title为null的Response .collect(Collectors.toList());
补充说明
Objects::nonNull是Java 8提供的工具方法,比手动写obj != null更简洁,也能避免手动判断时的疏漏- 如果需要同时过滤
title为空字符串的情况,可以把第二个过滤条件调整为:.filter(response -> Objects.nonNull(response.getTitle()) && !response.getTitle().isEmpty()) - 若不想直接过滤,而是希望给null的
title设置默认值(比如空字符串),可以借助Optional处理:executeRequest(requestId).stream() .filter(Objects::nonNull) .map(d -> (Response) d) .map(response -> { response.setTitle(Optional.ofNullable(response.getTitle()).orElse("")); return response; }) .collect(Collectors.toList());
内容的提问来源于stack exchange,提问作者Tindona
相关产品推荐
相关产品推荐

