【问题标题】: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 只是包装提供的数组。你不能改变数组的长度。

标签: java lambda predicate


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2019-10-17
      • 2014-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-18
      • 2012-05-29
      相关资源
      最近更新 更多