运行以下代码时出现错误:
$("#submit-btn").click(function(e){
e.preventDefault();
e.stopPropagation();
});
获取以下错误:
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);
}
}
为什么我收到了未知的源错误,如果我提供以下lambda它会正常工作:
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)
答案 0 :(得分:7)
null.startsWith("H")
返回NullPointerException
,而您必须检查该值是否为空,然后使用startsWith
:
list.removeIf(e -> e != null && e.startsWith("H"));
答案 1 :(得分:4)
您的其中一个条目是null
,e.startsWith("H")
代表NullPointerException
list.removeIf(e -> e != null && e.startsWith("H"));
答案 2 :(得分:2)
当你执行时它会起作用:
list.removeIf(e -> e == null);
因为您明确说“删除所有空元素”,所以此处NullPointerException
没有机会。
,而:
list.removeIf(e -> e.startsWith("H"));
说“删除以'H'开头的所有元素”,但如果e
为null,那么您将注定失败,因为它会产生NullPointerException
。
相反,在检查它是否以“Hi”开头之前检查它是否为空。
list.removeIf(e -> e != null && e.startsWith("H"));