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 产生异常,为啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章