2017-09-16 181 views
1
HashSet<Integer> liczby = new HashSet<Integer>(); 
liczby.add(1); 
liczby.add(2); 
liczby.add(3); 
liczby.add(4); 
liczby.removeIf ((Integer any) -> { return liczby.contains(3); }); 

for(Iterator<Integer> it = liczby.iterator(); it.hasNext();){ 
    Integer l2 = it.next(); 
    System.out.println(l2); 
} 

我不明白爲什麼removeIf刪除不僅3,而且1和2的條件應該只由3被滿足......lambda表達式在removeIf

+0

我建議在您的程序中只使用一種語言 - 英語。混合語言使得代碼難以被其他同伴閱讀,如果他們不知道波蘭語 - 他們不需要。 – DevDio

回答

3

拉姆達應用於每個元素,並檢查3存在,如果是它會刪除元素:

1 -> 3 is present -> delete 1 
2 -> 3 is present -> delete 2 
3 -> 3 is present -> delete 3 
4 -> 3 is not present -> don't delete 4 

要刪除所有3元素,可以使用以下解決方案之一:

liczby.removeIf(any -> any.equals(3)); 
//------------------------------------------------- 
liczby.removeIf(new Integer(3)::equals); 
//------------------------------------------------- 
Integer toRemove = 3; 
liczby.removeIf(toRemove::equals); 


TIPS

你的拉姆達可以簡化爲:

liczby.removeIf(any -> liczby.contains(3)); 

for-each循環可能會更容易地使用簡單的迭代:

for(Integer i : liczby){ 
    System.out.println(i); 
} 
+2

*因爲它是原始的*沒有它沒有。 :) – nullpointer

+0

或者只是使用'liczby.remove(3);' – Holger

5

認爲它這樣......只要該集合包含3它將繼續刪除,因此目前的結果。

如果你想刪除的3只有做到這一點:

liczby.removeIf(e -> e == 3); 
+3

你也可以做一個方法參考:'Integer interested = 3; liczby.removeIf(interested :: equals);' – Eugene