2017-09-16 6 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が満たすべき...それのラムダ

+0

あなたのプログラムでは1つの言語(英語のみ)を使用することをお勧めします。ミックス言語を使うと、他のピアがコードを読みにくくすることができます(ポリッシュランを知らないと、コードを読む必要がありません)。 – 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(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