从ArrayList中删除特定的矩形

时间:2016-07-29 09:45:46

标签: java arrays arraylist

如何从此ArrayList中删除特定的矩形? 我想删除高于100的矩形。

ArrayList <Rectangle> array = new ArrayList <Rectangle> ();
for (int i = 0; i<array.size(); i++) {
     if (array.get(i).getHeight() < 100) {
            array.remove(i);
     }
}

此代码无效! 如果你照看元素,那么矩形就会减少,但仍有超过100的矩形!

4 个答案:

答案 0 :(得分:4)

Java 8解决方案怎么样?

array = array.stream().filter(r -> r.getHeight() <= 100).collect(Collectors.toList());

它返回高List的新Rectangle 100dic = {'a': [4, 1, 3, 1], 'b': [4, 2, 1, 4], 'c': [5, 7, 9, 1]} df = pd.DataFrame(dic)

答案 1 :(得分:4)

除了> vs <的简单拼写错误:

如果向前迭代列表并按索引删除元素,如果有两个符合删除条件的相邻项目,则会遗漏元素。

或者:

  • 反向迭代列表:

    for (int i = array.size() - 1; i >= 0; i--) {
    
  • 删除项目后减少i(通常不推荐,因为在循环体中更改for循环的迭代变量会让人感到困惑):

    array.remove(i--);
    
  • 使用Iterator

    Iterator<Rectangle> it = array.iterator();
    while (it.hasNext()) {
      Rectangle r = it.next();
      if (some condition) {
        it.remove();
      }
    }
    

答案 2 :(得分:2)

纠正你的if条件如下

ArrayList <Rectangle> array = new ArrayList <Rectangle> ();
for (int i = 0; i<array.size(); i++) {
     if (array.get(i).getHeight() > 100) {
            array.remove(i--); // "--" means go back one step
     }
}

答案 3 :(得分:-1)

你可以这样做,

ArrayList <Rectangle> array = new ArrayList <Rectangle> ();
for (Rectangle rec : arrays) {
     if (rec.getHeight() > 100) {
            array.remove(i);
     }
}