【问题标题】:Check enumsets for same enum values [duplicate]检查枚举集是否具有相同的枚举值[重复]
【发布时间】:2014-09-19 16:34:42
【问题描述】:

我有两个EnumSets。

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

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

有什么快速的方法吗?

【问题讨论】:

  • 是的 :) 你可以用Collection.removeAll()做点什么。
  • 你的意思是同一个枚举values吗?
  • @chrylis 是的。我想知道哪些是相同的枚举值

标签: java collections enums enumset


【解决方案1】:

EnumSet 是一个集合。所以你大概可以使用retainAll方法来获取交集。

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

请注意,这将修改现有集合。如果你不想这样,你可以创建一个副本。如果这对您来说不是一个好的选择,您可以寻找其他解决方案。

【讨论】:

  • 返回一个布尔值。我想知道共同元素
  • 如果您仔细查看该方法,它会修改集合,而您获得的布尔返回值只是告诉您该集合在此方法调用后是否发生了变化。
【解决方案2】:
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】:

由于EnumSetsIterable 的子类型,因此您可以使用来自Apaches Collections(经常使用的第三方库)的CollectionUtils

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

【讨论】:

  • 考虑到使用现有 Java SE 类可以轻松解决问题,这个问题不是添加对第三方库的依赖的好理由。
【解决方案4】:

您可以在 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)
});

【讨论】:

    猜你喜欢
    • 2016-07-08
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 2015-02-12
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多