检查枚举集是否有相同的枚举值



我有两个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修改底层集合以创建副本。

由于EnumSetsIterable的子类型,因此您可以使用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)
});

相关内容

  • 没有找到相关文章

最新更新