从数组列表中删除每个循环的对象

2022-09-02 02:07:37

我想在完成对象后从中删除它,但我找不到方法来做到这一点。尝试像下面的示例代码中那样删除它并不想工作。如何访问此循环中当前对象的迭代器以将其删除?ArrayListpx

for( Pixel px : pixel){ 
[...]
  if(px.y > gHeigh){
     pixel.remove(pixel.indexOf(px)); // here is the thing
     pixel.remove(px); //doesn't work either
  }
}

答案 1

你不能,在增强的 for 循环中。你必须使用“长手”方法:

for (Iterator<Pixel> iterator = pixels.iterator(); iterator.hasNext(); ) {
  Pixel px = iterator.next();
  if(px.y > gHeigh){
    iterator.remove();
  }
}

当然,并非所有迭代器都支持删除,但您应该对 .ArrayList

另一种方法是构建一个额外的“要删除的像素”集合,然后在末尾调用列表。removeAll


答案 2

使用lamdba表达式,已经为集合引入了removeIf方法。

删除此集合中满足给定谓词的所有元素。

所以它只需要一行:

pixels.removeIf(px -> px.y > gHeigh);

推荐