使用LambdaQueryWrapper空指针异常,QueryWrapper没有
时间: 2023-11-03 16:00:32 浏览: 145
引用:lambda表达式中list.stream().map(o -> Long.valueOf(o.getId())).collect(Collectors.toList());报出了NPE,正常情况下list不为空不会发生NPE,最多o.getId()中id为空Long.valueOf(null)为空抛出NumberFormatException,但是最终却是因为id为空抛出了NPE。 。 引用:/** * 此时为空指针异常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; } 。 引用:list.stream().filter(o.getId() != null).map(o -> Long.valueOf(o.getId())).collect(Collectors.toList());`。
Lambda表达式中出现NPE的原因是因为在o.getId()中,id为空,导致了Long.valueOf(null)抛出了NullPointerException。这是一个异常情况,正常情况下,当list不为空时,不会发生NPE。最多会抛出NumberFormatException,因为Long.valueOf()方法无法将null转换为Long类型。
在引用中的示例代码中,当创建A对象时,a1的id被设置为null,a2和a3的id都被设置为非null的值。然后将这些A对象添加到了List中。在使用Lambda表达式进行操作时,当遇到a1的id为null时,就会抛出NPE异常。
解决这个问题的一种方法是在Lambda表达式中添加一个过滤器(filter),用于排除id为null的情况。可以使用filter(o.getId() != null)来过滤掉id为空的对象,然后再进行map操作。
例如,可以使用以下代码来避免空指针异常:
list.stream().filter(o -> o.getId() != null).map(o -> Long.valueOf(o.getId())).collect(Collectors.toList());
阅读全文