首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未知源Java 10

未知源Java 10
EN

Stack Overflow用户
提问于 2018-06-11 02:18:01
回答 3查看 438关注 0票数 1

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

代码语言:javascript
复制
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);

    }
}

获取以下错误:

代码语言:javascript
复制
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,它工作得很好:

代码语言:javascript
复制
list.removeIf(e -> e == null);
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-11 02:19:29

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

代码语言:javascript
复制
list.removeIf(e -> e != null && e.startsWith("H"));
票数 7
EN

Stack Overflow用户

发布于 2018-06-11 02:20:04

其中一个条目是null,而e.startsWith("H")给出了一个NullPointerException

代码语言:javascript
复制
list.removeIf(e -> e != null && e.startsWith("H"));
票数 4
EN

Stack Overflow用户

发布于 2018-06-11 02:24:33

当您执行以下操作时,它会起作用:

代码语言:javascript
复制
list.removeIf(e -> e == null);

因为您显式地说了“删除所有空元素”,所以这里不可能出现NullPointerException

鉴于:

代码语言:javascript
复制
 list.removeIf(e -> e.startsWith("H"));

是说“删除所有以'H‘开头的元素”,但是如果e是null,那么你就注定要失败,因为它将产生一个NullPointerException

相反,在检查它是否以"Hi“开头之前,先检查它是否不是null。

代码语言:javascript
复制
list.removeIf(e -> e != null && e.startsWith("H"));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50786739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档