为什么这个 lambda 表达式出错了



下面的代码有什么问题? list.removeIf(p -> p.contains("hello"));

import java.util.*;
public class NewClass1 {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("hello", " hello world", " hello china", "chi", "hi");
        System.out.println(list);
        list.removeIf(p -> p.contains("hello"));
        System.out.println(list);
    }
}

Arrays.asList()返回一个固定大小的列表。请参阅此处的javadoc:https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#asList(T...)

因此,您无法在返回的 List 对象中添加或删除项。

相反,您可以创建自己的列表实例:

List<String> list = new ArrayList<>(Arrays.asList("hello", " hello world", " hello china", "chi", "hi"));

您仍然可以方便地使用 asList() 创建列表,但通过构造ArrayList的新实例,它是完全可修改的。

最新更新