好的,我有一个整数数组列表,我想从中删除奇数或大于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
。