我正在开发一个 SpringBoot 项目,在测试时我故意在请求中传递类似的内容并得到一个 NullPointerException:
{
"materials": [
{
}
]
}
我不想在请求类中的
materials
上使用@NotNull,因为materials
字段可以为空。
但当它不为空时,我想确保存在一些字段,因为我需要验证其值。
final List<Material> materials = materialRequests.getMaterials().stream().map(MaterialRequest::getMaterial).collect(Collectors.toList());
// Throws NullPointerException here
final Set<String> materialIds = materials.stream().map(Material::getUuid).collect(Collectors.toSet());
调试时我看到了这个:
materials
显示它有 1 个元素,但它是 null,因此,我得到了一个空指针期望。
我怎样才能在这里检查它是否为空..为什么会有这样的行为?
在应用
null
之前从流中过滤掉 map()
元素:
final Set<String> materialIds = materials.stream()
.filter(Objects::nonNull)
.map(Material::getUuid)
.collect(Collectors.toSet());
使用
.filter()
过滤掉空值:
final Set<String> materialIds = materials.stream().filter(s -> s != null).map(Material::getUuid).collect(Collectors.toSet());