从ArrayList中删除多个元素

Jef*_*rey 33 java arraylist

我有一堆索引,我想删除这些索引中的元素ArrayList.我不能做一个简单的remove()s 序列,因为元素在每次移除后都会移位.我该如何解决这个问题?

aio*_*obe 40

要删除元素indexes:

Collections.sort(indexes, Collections.reverseOrder());
for (int i : indexes)
    strs.remove(i);
Run Code Online (Sandbox Code Playgroud)

或者,使用Java 8中的Stream API:

indexes.sort(Comparator.reverseOrder());
indexes.stream().mapToInt(i -> i).forEach(l::remove);
Run Code Online (Sandbox Code Playgroud)


Mar*_*ers 28

按降序对索引进行排序,然后逐个删除它们.如果这样做,删除将无法影响您以后要删除的任何索引.

如何对它们进行排序将取决于您用于存储索引的集合.如果是列表,您可以这样做:

List<Integer> indices;
Collections.sort(indices, new Comparator<Integer>() {
   public int compare(Integer a, Integer b) {
      //todo: handle null
      return b.compareTo(a);
   }
}
Run Code Online (Sandbox Code Playgroud)

编辑

@aioobe找到了我找不到的助手.而不是上述,你可以使用

Collections.sort(indices, Collections.reverseOrder());
Run Code Online (Sandbox Code Playgroud)

  • 无需重新设计反向反向比较器.见[我的回答](http://stackoverflow.com/questions/4950678/remove-multiple-elements-from-arraylist/4950905#4950905). (3认同)

Avi*_*oss 6

我来这里是为了删除特定范围内的元素(即,两个索引之间的所有元素),并发现了这一点:

list.subList(indexStart, indexEnd).clear()
Run Code Online (Sandbox Code Playgroud)


Man*_*qui 5

您可以从最大索引开始向下删除元素,或者如果您有要删除的对象的引用,则可以使用removeAll方法。