首先,可能需要确保输入列表至少包含num 出现的所需元素,也就是说,应该跟踪适当的索引,并且一旦检测到num 元素,删除这些索引处的元素:
public static void removeNFirst(ArrayList<Integer> list, int num, int element) {
int[] indexes = IntStream.range(0, list.size())
.filter(i -> list.get(i) == element)
.limit(num)
.toArray();
// make sure at least num elements are found
if (indexes.length < num) {
return;
}
for (int i = indexes.length; i-- > 0; ) {
list.remove(indexes[i]);
}
}
测试:
ArrayList<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 1, 2, 1, 3));
System.out.println("Initial: " + list);
removeNFirst(list, 3, 1);
System.out.println("Removed three first 1: " + list);
removeNFirst(list, 2, 2);
System.out.println("Removed two first 2: " + list);
输出:
Initial: [1, 2, 1, 2, 1, 3]
Removed three first 1: [2, 2, 3]
Removed two first 2: [3]