List的removeIf()方法不起作用,抛出UnsupportedOperationException异常

3

当我尝试使用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"));
    }
}

有人能帮我理解为什么会发生这种情况,以及如何纠正吗?


3
Arrays.asList() 返回一个不可修改的列表。您无法更改其内容。 - ernest_k
顺便提一下,lambda 中不需要类型或括号:这些可以被推断出来。 - Andy Turner
@Ernest你可以更改列表,但只能使用set(或replaceAll)。它是固定大小的,而不是不可修改的。 - Andy Turner
2个回答

10

Arrays.asList(arr) 返回的是一个固定大小的 List,因此你无法向其添加或删除元素(只能替换现有元素)。

应该创建一个 ArrayList 来代替:

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

1

既然您明确调用了Arrays.asList,考虑不这样做的替代方案,并直接创建筛选列表:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接