【发布时间】: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
我想将此 Enum 排序为 反转字母顺序 并返回它。当我尝试通过覆盖来使用 compareTo 方法时,我看到它被声明为 final。
有没有办法覆盖类似于 compareTo 的枚举
怎么可能排序所以我得到:
D、C、B、A
public enum Test {
C(1)
B(2)
A(3)
D(4)
}
【问题讨论】:
标签: java class sorting methods enums
由于您无法在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()));
【讨论】:
compareTo() 的 Enum 实现基于枚举的 ordinal 值。
ordinal 是:
final int 值0(零)开始因此,如果您希望枚举以不同的顺序排序,您可以简单地按该顺序声明它们:
public enum Test { D(4), C(1), B(2), A(3) }
(不确定你传递给构造函数的值代表什么,所以我保留了你的值)
【讨论】: