【问题标题】:removeIf() of List not working throwing - UnsupportedOperationException [duplicate]列表的 removeIf() 不起作用抛出 - UnsupportedOperationException [重复]
【发布时间】:2018-10-20 08:09:01
【问题描述】:

当我尝试使用 removeIf() 从列表中删除元素时,它正在抛出 UnsupportedOperationException

public class T {
        public static void main(String[] args) {
        String[] arr = new String[] { "1", "2", "3" };
        List<String> stringList = Arrays.asList(arr);
        stringList.removeIf((String string) -> string.equals("2"));
    }
}

谁能帮我理解为什么会发生这种情况以及我该如何纠正这个问题?

【问题讨论】:

  • Arrays.asList() 返回一个不可修改的列表。您无法更改其内容
  • 顺便说一句,您不需要 lambda 中的类型或括号:这些可以推断出来。
  • @Ernest 您可以更改列表,但只能使用set(或replaceAll)。它是固定大小的,不是不可修改的。

标签: java arraylist java-8


【解决方案1】:

由于您明确调用Arrays.asList,请考虑不这样做的替代方法,并直接创建过滤列表:

Stream.of(arr)
    .filter(string -> !string.equals("2"))
    .collect(Collectors.toList())

【讨论】:

    【解决方案2】:

    Arrays.asList(arr) 返回一个固定大小的List,因此您不能在其中添加或删除元素(只能替换现有元素)。

    改为创建ArrayList

    List<String> stringList = new ArrayList<>(Arrays.asList(arr));
    

    【讨论】:

      猜你喜欢
      • 2017-08-18
      • 2013-02-26
      • 2014-10-26
      • 2022-01-22
      • 2014-01-30
      • 1970-01-01
      • 2011-02-14
      • 1970-01-01
      • 2015-07-22
      相关资源
      最近更新 更多