removeIf中的lambdas

时间:2017-09-16 16:54:14

标签: java lambda java-8 remove-if

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满足...

2 个答案:

答案 0 :(得分:5)

以这种方式思考......只要该集合包含3,它就会继续删除当前的结果。

如果您只想删除3,请执行以下操作:

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

答案 1 :(得分:3)

lambda应用于每个元素并检查是否存在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

您的lambda可以简化为:

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

For-each循环可能更容易用于简单迭代:

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