为什么从满足两个条件之一的数组列表中删除项不工作?



好的,我有一个整数数组列表,我想从中删除奇数或大于100的项。我的代码,然而,不工作,我真的不知道为什么?

list.add(1);
list.add(899);
list.add(5);
list.add(647);
list.add(4);
list.add(804);
list.add(103);
ArrayList<Integer> list2  = removeEntries(list);
public static ArrayList<Integer> removeEntries(ArrayList<Integer> list1) {
for(int i = 0; i < list1.size(); i++) {
while(list1.get(i) % 2 != 0 || list1.get(i) > 100) {
if(i != list1.size()) list1.remove(i);
}
}
return list1;
}

这并没有给我正确的列表2条目,但我不明白为什么…

List#removeIf

使用Collection#removeIf方法,继承List。通过带有移除标准的Predicate

:

list.removeIf(x -> x != null && (x % 2 == 1 || x > 100));
System.out.println(list);  // [4]

方法中的while循环是不正确的,这应该是if:

List<Integer> filteredList = new ArrayList<>();
for (Integer i : list1) {
if (i % 2 == 0 && i < 100) {
filteredList.add(i);
}
}
return filteredList;

可以肯定的是,当你在迭代一个集合时使用remove()会抛出一个ConcurrentModificationException