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); 
} 

Je ne comprends pas pourquoi removeif supprime non seulement 3 mais aussi 1 et 2 condition doit être satisfaite que par 3 ...lambdas dans removeif

+0

Je suggère d'utiliser une seule langue dans vos programmes - anglais. Le langage de mélange rend le code plus difficile à lire par d'autres pairs, s'ils ne connaissent pas la langue polonaise - et ils n'ont pas à le faire. – DevDio

Répondre

3

Le lambda est appliqué sur chaque élément et vérifier si 3 est présente, si oui, il supprimera l'élément:

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 

Pour supprimer tous les éléments 3, vous pouvez utiliser l'une de ces solutions:

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


CONSEILS

Votre lambda peut être simplifiée comme:

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

Pour-chaque boucle peut être plus facile à utiliser pour l'itération simple:

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

* parce que c'est primitif * non c'est pas le cas. :) – nullpointer

+0

ou simplement utiliser 'liczby.remove (3);' – Holger

5

penser de cette façon ... aussi longtemps que l'ensemble contient 3 il continuera à supprimer d'où le résultat actuel.

Si vous souhaitez supprimer le 3 alors seulement ceci:

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

vous pouvez aussi faire une référence de méthode: 'Integer interested = 3; liczby.removeIf (interest :: equals); ' – Eugene