【问题标题】:Combining Java EnumSets组合 Java 枚举集
【发布时间】:2011-04-09 04:00:26
【问题描述】:

如果我有一个 Enum,我可以使用方便的 EnumSet 类创建一个 EnumSet

enum Suit { CLUBS, DIAMONDS, HEARTS, SPADES }
EnumSet<Suit> reds = EnumSet.of(Suit.HEARTS, Suit.DIAMONDS);
EnumSet<Suit> blacks = EnumSet.of(Suit.CLUBS, Suit.SPADES);

给定两个 EnumSet,如何创建一个包含这两个集合并集的新 EnumSet?

EnumSet&lt;Suit&gt; redAndBlack = ?

【问题讨论】:

    标签: java enumset


    【解决方案1】:

    这是提取到一个泛型中的答案,您可以将其与任意两个EnumSet&lt;T&gt; 一起使用来合并它们。

    private <T extends Enum<T>> EnumSet<T> mergeEnumSet(EnumSet<T> a, EnumSet<T> b) {
        final EnumSet<T> union = EnumSet.copyOf(a);
        union.addAll(b);
        return union;
    }
    

    【讨论】:

      【解决方案2】:

      在这种情况下,您也可以使用

      EnumSet<Suit> redAndBlack = EnumSet.allOf(Suit.class)
      

      【讨论】:

      • 这是正确的,回答了问题,并且可能对某些读者有所帮助。为什么它被否决了?
      • @MichaelScheper :这不是两个集合的并集,而是原始集合。在这种情况下,它们是等价的,但你是对的。如果我不得不猜测,我会说这个被否决的原因是因为这是你搜索 java enum union 时弹出的内容。
      • @Jpatrick: :nod: 惩罚某人回答 OP 的问题似乎是报复性和愚蠢的,当它与他们所希望的不同时。但在过去 24 小时内,世界上有多少仇恨者已经很清楚了,所以我不应该感到惊讶。
      • @MichaelScheper 你在没有恶意的地方看到了恶意。这个答案不是我问的问题的正确答案。仅仅因为给出的示例给出了相同的结果,并不意味着它在所有情况下都会给出相同的结果。这并不意味着答案没有用或不值得,只是它回答了错误的问题。我可以在这里保留答案,因为其他人可能会觉得它很有用,但它不应该得到很多赞成,以免有人来盲目复制解决方案而没有意识到它实际上并没有解决我所说的问题。
      【解决方案3】:

      EnumSet 也是一个集合,因此您也可以使用许多 Collection API 调用,例如 addAll。

      EnumSet<Suit> redAndBlack = EnumSet.copyOf(reds);
      redAndBlack.addAll(blacks);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-14
        • 2013-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-14
        • 1970-01-01
        • 2020-07-26
        相关资源
        最近更新 更多