假设我有一个名为ArrayList
的{{1}} Child
个对象。
children
现在我有一个整数列表,它是ArrayList<Child> children = new ArrayList<>(data);
中儿童的一些索引。
children
删除List<Integer> items = new ArrayList<>(data2);
中具有与children
中的整数匹配的索引的items
中所有子项的最有效方法是什么?
答案 0 :(得分:3)
您可以创建要删除的对象列表,然后使用ArrayList的removeAll()
方法。
尝试这样的事情:
ArrayList<Child> toRemove = new ArrayList<>();
for (int i = 0; i < items.size(); i++) {
toRemove.add(children.get(items.get(i)));
}
children.removeAll(toRemove);
希望这有帮助。
答案 1 :(得分:2)
如果没有对项目进行排序(首先是更高的值):Collections.sort(items, Collections.reverseOrder());
然后:
for (Integer i : items) {
children.remove(i);
}
答案 2 :(得分:1)
最好的方法是创建一个包含通过条件的元素的新列表。
答案 3 :(得分:1)
作为aurelianus上述答案的替代方案,考虑您的用例:
对items数组进行排序,然后按索引的降序从子数组中删除Child对象。
成本考虑因素:
答案 4 :(得分:1)
支持创建一个新的,已过滤的列表并将旧列表视为不可变的,以下是在Java 8中如何做到这一点:
List<Child> collect = IntStream.range(0, children.size())
.filter(i -> !items.contains(i))
.mapToObj(children::get)
.collect(Collectors.toList());