2016-07-29 98 views
1

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

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

你'if'条件是不正确,应该是'array.get(I).getHeight()> 100' – Abubakkar

+1

您可以更改 '<' to this '>' –

+0

添加的System.out .println在各个点,并找出发生了什么:) – Teddy

回答

4

什么有关Java 8的解决方案?

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

它返回RectangleList新的S是比100高。

+1

我假设你想把结果列表分配到别的地方,否则它不会做任何事情。 –

+0

@PeterLawrey,是的,当然。我将结果分配给相同的变量。谢谢。 – Andrew

+0

谢谢!工作! – Liuk

2

纠正你,如果条件如下

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

注意:你需要做'array.remove(i - );'作为下一个条目的索引已经改变。 –

+0

如果您正在修改集合,则for-each循环很难使用。 –

+1

是的彼得我忘记了...... –

-1

你可以这样做,

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

“我”在哪里申报? – jsheeran

+0

我已更新代码@jsheeran。请看一下。谢谢。 –

4

除了从>简单的错字VS <

如果迭代名单前锋和索引中删除的元素,你就会错过的元素,如果有是两个相邻的物品符合拆除标准。

或者:

  • 迭代列表反向:

    for (int i = array.size() - 1; i >= 0; i--) { 
    
  • 递减i移除项目之后(一般不推荐的,因为它是混乱来改变用于在循环的迭代变量循环体):

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

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

@无论是 - 感谢编辑。我删除了底部的“编辑...”位,因为它是一个简单的错字。 –