【发布时间】:2020-09-12 14:02:30
【问题描述】:
我正在查看一些 Java 8 代码并观察到类似下面的内容,有人可以帮我理解它的实际含义吗?
hashSetA.removeif(hasSetB::remove);
【问题讨论】:
-
我认为你应该澄清你关于什么是
hashSetA或hashSetB的问题?
标签: java java-8 method-reference
我正在查看一些 Java 8 代码并观察到类似下面的内容,有人可以帮我理解它的实际含义吗?
hashSetA.removeif(hasSetB::remove);
【问题讨论】:
hashSetA 或hashSetB 的问题?
标签: java java-8 method-reference
方法引用是将 lambda 的参数传递给方法的简写。也就是说,这个sn-p:
hashSetA.removeIf(hashSetB::remove);
相当于:
hashSetA.removeIf(itemFromA -> hashSetB.remove(itemFromA));
remove 如果项目被实际删除,则返回 true。所以这里实际发生的是removeIf 遍历hashSetA 中的所有项目,并尝试从hashSetB 中删除每个项目。如果该项目实际上位于 hashSetB 中,则将其从其中删除,然后从 hashSetA 中删除。
【讨论】:
removeIf 参见:docs.oracle.com/javase/8/docs/api/java/util/HashSet.html from Collection docs.oracle.com/javase/8/docs/api/java/util/Collection.html