我在运行以下代码时遇到错误:
public class TestClass {
public static void main(String[] args) {
var list = new ArrayList<String>();
list.add("Harry");
list.add("Marry");
list.add(null);
list.add("Larry");
list.removeIf(e -> e.startsWith("H"));
list.forEach(System.out::println);
}
}获取以下错误:
Exception in thread "main" java.lang.NullPointerException
at test/test.TestClass.lambda$0(TestClass.java:14)
at java.base/java.util.ArrayList.removeIf(Unknown Source)
at java.base/java.util.ArrayList.removeIf(Unknown Source)
at test/test.TestClass.main(TestClass.java:14)为什么我得到了未知的源代码错误,如果我提供以下lambda,它工作得很好:
list.removeIf(e -> e == null);发布于 2018-06-11 02:19:29
null.startsWith("H")返回NullPointerException,而您必须检查该值是否为null,然后使用startsWith
list.removeIf(e -> e != null && e.startsWith("H"));发布于 2018-06-11 02:20:04
其中一个条目是null,而e.startsWith("H")给出了一个NullPointerException
list.removeIf(e -> e != null && e.startsWith("H"));发布于 2018-06-11 02:24:33
当您执行以下操作时,它会起作用:
list.removeIf(e -> e == null);因为您显式地说了“删除所有空元素”,所以这里不可能出现NullPointerException。
鉴于:
list.removeIf(e -> e.startsWith("H"));是说“删除所有以'H‘开头的元素”,但是如果e是null,那么你就注定要失败,因为它将产生一个NullPointerException。
相反,在检查它是否以"Hi“开头之前,先检查它是否不是null。
list.removeIf(e -> e != null && e.startsWith("H"));https://stackoverflow.com/questions/50786739
复制相似问题