说明:JAVA8 用stream流来循环取LIST值时,如果值为空时会报 null point exception异常,解决办法为提前判断该值是否为空。
下面是决断为空的写法。
场景说明:我有一个产品LIST,我要遍历此LIST,生成一个MAP,key为id,value为name
BEAN如下:
@Setter
@Getter
public class Product {
private String id;
private String name;
}
但当我不做处理时,如果其中有一个name属性为null就会 抛出了null point exception
List<Product> prdLst = new ArrayList<>();
Map<String, String> prdMap = prdLst.stream().collect(Collectors.toMap(Product :: getId, p -> p.getName()));
这是因为collect返回的元素Optional是不支持null类型的。
解决办法是用filter过滤一下,将为空的name过滤掉。
Map<String, String> prdMap = prdLst.stream().filter(p -> p.getName() != null)
.collect(Collectors.toMap(Product :: getId, p -> p.getName()));
当然如果不是属性为空。而是对像为空。需要用filter(Objects :: nonNull)