JAVA 8 stream findfirst()、findAny、get() 报 null point exception 空指针异常

说明: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 prdLst = new ArrayList<>();
Map prdMap = prdLst.stream().collect(Collectors.toMap(Product :: getId, p -> p.getName()));

这是因为collect返回的元素Optional是不支持null类型的。

解决办法是用filter过滤一下,将为空的name过滤掉。

Map prdMap = prdLst.stream().filter(p -> p.getName() != null)
                .collect(Collectors.toMap(Product :: getId, p -> p.getName()));

当然如果不是属性为空。而是对像为空。需要用filter(Objects :: nonNull)

你可能感兴趣的:(JAVA)