/**
* 此时为空指针异常NPE,而不是NumberFormatException
*/
public class LamError {
@Test
public void test1() {
A a1 = new A();
a1.setId(null);
a1.setName(null);
A a2 = new A();
a2.setId(2L);
a2.setName("1");
A a3 = new A();
a3.setId(2L);
a3.setName(null);
List<A> list = new ArrayList<>();
list.add(a1); // id是null name不是Null
list.add(a2); // 都不为空
list.add(a3); // name是null
list.stream().map(o -> Long.valueOf(o.getId())).collect(Collectors.toList());
// list.stream().map(p -> Long.valueOf(p.getName())).collect(Collectors.toList());
}
}
class A {
private Long id;
private String name;
}
a1不为null,但还是a1的id为空,最终却报错位NullPointerException
lambda表达式中list.stream().map(o -> Long.valueOf(o.getId())).collect(Collectors.toList());
报出了NPE,正常情况下list
不为空不会发生NPE,最多o.getId()
中id为空Long.valueOf(null)
为空抛出NumberFormatException
,但是最终却是因为id为空抛出了NPE。
修改:(先过滤一下)
list.stream().filter(o.getId() != null).map(o -> Long.valueOf(o.getId())).collect(Collectors.toList());`