2016-07-29 138 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

@無論是 - 感謝編輯。我刪除了底部的「編輯...」位,因爲它是一個簡單的錯字。 –