Jon*_*Fan 2 java lambda filter
我的代码是这样的
class A {
private Long b;
public Long getB() {
return b;
}
public void setB(Long b) {
this.b = b;
}
public static void main(String[] args) {
A a1 = new A();
List<A> list = new ArrayList<>();
list.add(a1);
list.stream().mapToLong(A::getB).filter(Objects::nonNull).sum();
}
}
Run Code Online (Sandbox Code Playgroud)
我想过滤空值,但它不起作用,并给我一个 NullPointerException。
如果我在 mapToLong 之前过滤,比如
list.stream().filter(a -> a.getB()!=null).mapToLong(A::getB).sum();
Run Code Online (Sandbox Code Playgroud)
它运作良好。我想知道为什么。
mapToLong转换Long成long- 如果是,null你确实会得到一个例外。
您需要在转换之前过滤nulls :
list.stream()
.map(A::getB)
.filter(Objects::nonNull) //filter the nulls first
.mapToLong(Long::longValue) //then convert to primitive
.sum();
Run Code Online (Sandbox Code Playgroud)