在Enums上覆盖compareTo

时间:2020-04-06 00:31:54

标签: java class sorting methods enums

我想将此枚举按颠倒的字母顺序排序并返回。当我尝试通过覆盖使用compareTo方法时,我看到它被声明为 final

有没有一种方法可以覆盖Enum,类似于compareTo

如何对它进行排序,这样我得到:

D,C,B,A

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

2 个答案:

答案 0 :(得分:0)

由于无法在java.lang.Comparable上实现enum,因此一种方法是创建包装器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()));

答案 1 :(得分:0)

Enum的{​​{1}}实现基于枚举的compareTo()值。

ordinal是:

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

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

0

(不确定传递给构造函数的值代表什么,所以我维护了您的值)

相关问题