【问题标题】:Overriding compareTo at Enums在枚举中覆盖 compareTo
【发布时间】:2020-04-06 00:31:54
【问题描述】:

我想将此 Enum 排序为 反转字母顺序 并返回它。当我尝试通过覆盖来使用 compareTo 方法时,我看到它被声明为 final

有没有办法覆盖类似于 compareTo 的枚举

怎么可能排序所以我得到:

D、C、B、A

public enum Test { 
 C(1)
 B(2)
 A(3)
 D(4)
}

【问题讨论】:

    标签: java class sorting methods enums


    【解决方案1】:

    由于您无法在enum 上实现java.lang.Comparable,一种方法是创建一个包装器java.util.Set 来比较名称上的enum

    Set<Test> testEnumSet = new TreeSet<>(new Comparator<Test>() {
       @Override
       public int compare(Test first, Test second) {
          return second.name().compareTo(first.name());
       }
    });
    
    testEnumSet.addAll(Arrays.asList(Test.values()));
    

    这将产生排序

    [D, C, B, A]
    

    要将顺序更改为升序:

    return -(second.name().compareTo(first.name()));
    

    【讨论】:

      【解决方案2】:

      compareTo()Enum 实现基于枚举的 ordinal 值。

      ordinal 是:

      • 原始final int
      • 在施工期间分配
      • 基于枚举声明的顺序
      • 0(零)开始

      因此,如果您希望枚举以不同的顺序排序,您可以简单地按该顺序声明它们:

      public enum Test { D(4), C(1), B(2), A(3) }
      

      (不确定你传递给构造函数的值代表什么,所以我保留了你的值)

      【讨论】:

        猜你喜欢
        • 2020-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-23
        • 2012-03-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多