我有两个EnumSet
。
EnumSet.of(A1, A2, A3);
EnumSet.of(A3, A4, A5, A6);
我想找到两个集合中存在哪些值。 (在这种情况下,A3
。)
有没有快速的方法呢?
答案 0 :(得分:9)
EnumSet
是一个集合。因此,您可以使用retainAll方法来获取交集。
仅保留此集合中包含在指定集合中的元素(可选操作)。换句话说,从此集合中删除未包含在指定集合中的所有元素。如果指定的集合也是一个集合,则此操作会有效地修改此集合,使其值为两个集合的交集。
请注意,这将修改现有集合。如果您不想要,可以创建副本。如果这不适合您,您可以寻找其他解决方案。
答案 1 :(得分:7)
由于EnumSets
是Iterable
的子类型,因此您可以使用Apaches Collections(通常使用的第三方库)中的CollectionUtils
。
CollectionUtils.intersection (
EnumSet.of (A1, A2, A3),
EnumSet.of (A3, A4, A5, A6)
);
答案 2 :(得分:7)
EnumSet A = EnumSet.of(A1, A2, A3);
EnumSet B = EnumSet.of(A3, A4, A5, A6);
EnumSet intersection = EnumSet.copyOf(A);
intersection.retainAll(B);
retainAll
修改基础集,以便创建副本。
答案 3 :(得分:6)
您可以在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)
});