RemoveIf 产生异常,为啥? [复制]

Posted

技术标签:

【中文标题】RemoveIf 产生异常,为啥? [复制]【英文标题】:RemoveIf generate an exception, why? [duplicate]RemoveIf 产生异常,为什么? [复制] 【发布时间】:2017-09-16 18:12:43 【问题描述】:

我尝试使用 lambda 表达式从列表中删除一个项目,但 removeIf 生成异常,为什么?

在这个 Orlacle 视频中,jdk8 8 MOOC 介绍了带有 list 而不是 arraylist 的 removeif。这样对吗 ? https://youtu.be/olKF7VpJMfg?list=PLMod1hYiIvSZL1xclvHcsV2dMiminf19x&t=137

public static void main(String[] args)
        List<String> parole = Arrays.asList("Lambda ", "expressions ", "are ", "cool ");
Predicate <String> findAre= s->"are ".equals(s);         
        parole.removeIf(findAre);
        parole.forEach( System.out::println);
            

Here pict with code and Exception in thread "main"

【问题讨论】:

请将此作为minimal reproducible example 发布,并将异常包含为text。提供屏幕截图在这里没有任何好处,这意味着异常类型没有被索引... Arrays.asList 只是包装提供的数组。你不能改变数组的长度。 【参考方案1】:

Arrays.asList 生成一个由数组支持的固定大小的列表,因此您无法在其中添加或删除元素。

您可以创建ArrayList 以支持删除:

List<String> parole = new ArrayList<>(Arrays.asList("Lambda ", "expressions ", "are ", "cool "));

【讨论】:

【参考方案2】:

还有一个建议,请在列表迭代期间使用迭代器从数组列表中删除对象,而不是为每个循环删除对象,因为你会得到并发修改异常。

【讨论】:

以上是关于RemoveIf 产生异常,为啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥会产生浮点异常?

为啥 JUnit 测试异常总是失败? [复制]

为啥要尝试在已检查的异常上抛出未检查的异常? [复制]

为啥连续抛出 2 个异常不会产生无法访问的代码警告?

为啥没有登录异常堆栈跟踪? [复制]

为啥此代码显示参数索引超出范围异常? [复制]