刚开始是这样写的然后报错,我以为是迭代器的原因
public static void main(String[] args) {
List<String> strings = Arrays.asList("aa", "bb", "cc");
for (String string : strings) {
strings.removeIf(str -> str.equals("bb"));
}
System.out.println(strings);
}
改了下发现还是报错
public static void main(String[] args) {
List<String> strings = Arrays.asList("aa", "bb", "cc");
Iterator<String> iterator = strings.iterator();
while (iterator.hasNext()) {
String string = iterator.next();
if (string.equals("bb")) {
iterator.remove();
}
}
System.out.println(strings);
}
最后才知道
Arrays.asList
返回的是一个不可变的列表,因此无法修改。你可以将其转换为可变的列表,然后再删除元素,简单来讲就是new一个新的列表即可。下面是解决后的代码,这里的for循环没有任何意义,只是复现一下当时是遍历一个dto集合拿id进行比对。
public static void main(String[] args) {
List<String> strings = Arrays.asList("aa", "bb", "cc");
ArrayList<String> list = new ArrayList<>(strings);
for (String string : strings) {
list.removeIf(str -> str.equals("bb"));
}
System.out.println(list);
}