我在运行以下代码时遇到错误:
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)
null.startsWith("H")返回,NullPointerException你必须检查值是否为null然后使用startsWith:
list.removeIf(e -> e != null && e.startsWith("H"));
Run Code Online (Sandbox Code Playgroud)