我有两个EnumSet
。
EnumSet.of(A1, A2, A3);
EnumSet.of(A3, A4, A5, A6);
我想找出在两个集合中都存在的值。(在这种情况下,A3
.)
有什么快速的方法吗?
EnumSet
为Set。所以你可以使用retainAll方法来获取交集
只保留集合中指定集合中的元素(可选操作)。换句话说,从此集合中删除未包含在指定集合中的所有元素。如果指定的集合也是一个集合,则该操作有效地修改该集合,使其值为两个集合的交集。
注意,这将修改现有集合。如果你不想这样,你可以创建一个副本。如果这对你来说不是一个好的选择,你可以寻找其他解决方案。
EnumSet A = EnumSet.of(A1, A2, A3);
EnumSet B = EnumSet.of(A3, A4, A5, A6);
EnumSet intersection = EnumSet.copyOf(A);
intersection.retainAll(B);
retainAll
修改底层集合以创建副本。
由于EnumSets
是Iterable
的子类型,因此您可以使用Apaches Collections(通常使用第三方库)中的CollectionUtils
。
CollectionUtils.intersection (
EnumSet.of (A1, A2, A3),
EnumSet.of (A3, A4, A5, A6)
);
你可以在java 8中使用Streams API:
Set set1 = EnumSet.of(A1, A2, A3); // add type argument to set
Set set2 = EnumSet.of(A3, A4, A5, A6); // add type argument to set
set2.stream().filter(set1::contains).forEach(a -> {
// Do something with a (it's in both sets)
});