Переопределение сравнения в Enums - PullRequest
1 голос
/ 06 апреля 2020

Я хочу отсортировать этот Enum как в обратном алфавитном порядке и вернуть его. Когда я пытался использовать метод CompareTo, переопределяя его, я увидел, что он объявлен как final .

. Есть ли способ переопределить Enum, похожий на compareTo

Как это можно отсортировать это так, я получаю:

D, C, B, A

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

Ответы [ 2 ]

0 голосов
/ 06 апреля 2020

Реализация Enum compareTo() основана на значении enum ordinal.

ordinal:

  • примитив final int значение
  • Назначается при построении
  • На основе порядка объявления перечисления
  • Начиная с 0 (ноль)

Итак, если вы хотите, чтобы перечисление сортировалось в другом порядке, вы можете просто объявить их в следующем порядке:

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

(не уверен, какие значения вы передаете в конструктор, поэтому я сохранил ваши значения)

0 голосов
/ 06 апреля 2020

Поскольку вы не можете реализовать 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()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...