removeIf 中的 lambda
lambdas in removeIf
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满足...
这样想...只要集合包含 3
它将继续删除因此当前结果。
如果您只想删除 3
然后执行此操作:
liczby.removeIf(e -> e == 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);
小贴士
您的 lambda 可以简化为:
liczby.removeIf(any -> liczby.contains(3));
For-each 循环可能更易于用于简单迭代:
for(Integer i : liczby){
System.out.println(i);
}
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满足...
这样想...只要集合包含 3
它将继续删除因此当前结果。
如果您只想删除 3
然后执行此操作:
liczby.removeIf(e -> e == 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);
小贴士
您的 lambda 可以简化为:
liczby.removeIf(any -> liczby.contains(3));
For-each 循环可能更易于用于简单迭代:
for(Integer i : liczby){
System.out.println(i);
}