未知的源Java 10

时间:2018-06-10 18:18:01

标签: java java-stream

运行以下代码时出现错误:

$("#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)

3 个答案:

答案 0 :(得分:7)

null.startsWith("H")返回NullPointerException,而您必须检查该值是否为空,然后使用startsWith

list.removeIf(e -> e != null && e.startsWith("H"));

答案 1 :(得分:4)

您的其中一个条目是nulle.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"));