实体类
@Data
public class OrangeCodeDto{
private List<String> orangeCodeList;
}
未做判空前
List<OrangeCodeDto> dtoList = new ArrayList<>();
dtoList.add(new OrangeCodeDto());
if (dtoList.size() == 0){
return;
}
log.info("==============dtoList集合 size:{},集合:{}===========================>", dtoList.size(),JSON.toJSONString(dtoList));
List<String> orangeCode = dtoList.stream()
.flatMap(o -> o.getOrangeCodeList().stream())
.filter(code -> "345df".equals(code))
.filter(Objects::nonNull)
.distinct()
.collect(Collectors.toList());
log.info("==============orangeCode集合 size:{},集合:{}===========================>", orangeCode.size(),JSON.toJSONString(orangeCode));
打印信息
==============dtoList集合 size:1,集合:[{}]===========================>
Exception in thread "main" java.lang.NullPointerException
代码分析
1.if (dtoList.size() == 0)这里对dtoList进行了判空,**dtoList.stream()**这里应该不会空指针
2.flatMap里的第2个流操作这里o.getOrangeCodeList()并未做判断操作,显而易见,是o.getOrangeCodeList()为空导致的空指针异常
做判空后
List<String> orangeCode = dtoList.stream()
.filter(o->o.getOrangeCodeList() != null)
.flatMap(o -> o.getOrangeCodeList().stream())
.filter(code -> "345df".equals(code))
.filter(Objects::nonNull)
.distinct()
.collect(Collectors.toList());
打印信息
==============dtoList集合 size:1,集合:[{}]===========================>
==============orangeCode集合 size:0,集合:[]===========================>