未知的源Java 10

use*_*372 1 java java-stream

我在运行以下代码时遇到错误:

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);

    }
}
Run Code Online (Sandbox Code Playgroud)

获得以下错误:

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)
Run Code Online (Sandbox Code Playgroud)

为什么我得到了未知的源错误,如果我提供以下lambda它会正常工作:

list.removeIf(e -> e == null);
Run Code Online (Sandbox Code Playgroud)

YCF*_*F_L 7

null.startsWith("H")返回,NullPointerException你必须检查值是否为null然后使用startsWith:

list.removeIf(e -> e != null && e.startsWith("H"));
Run Code Online (Sandbox Code Playgroud)