检查enumsets是否具有相同的枚举值

时间:2014-07-28 13:12:29

标签: java collections enums enumset

我有两个EnumSet

EnumSet.of(A1, A2, A3);
EnumSet.of(A3, A4, A5, A6);

我想找到两个集合中存在哪些值。 (在这种情况下,A3。)

有没有快速的方法呢?

4 个答案:

答案 0 :(得分:9)

EnumSet是一个集合。因此,您可以使用retainAll方法来获取交集。

  

仅保留此集合中包含在指定集合中的元素(可选操作)。换句话说,从此集合中删除未包含在指定集合中的所有元素。如果指定的集合也是一个集合,则此操作会有效地修改此集合,使其值为两个集合的交集。

请注意,这将修改现有集合。如果您不想要,可以创建副本。如果这不适合您,您可以寻找其他解决方案。

答案 1 :(得分:7)

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