Ты должен сделать Check implements Comparable<Check>
, но не сам implements Comparator
.
Тип Comparable
определяет естественное упорядочение для типа, а Comparator
для типа обычно не является самим типом и определяет их собственное упорядочение этого типа.
Похожие вопросы
Кроме того, вы не должны использовать необработанный тип. Вам необходимо использовать параметризованные универсальные типы: Comparable<Check>
, Comparator<Check>
, List<Check>
и т. Д.
Смежные вопросы
A String
пример
Давайте посмотрим, что имеет String
:
public final class String implements Comparable<String>
String
определяет его естественное упорядочение как чувствительное к регистру
- имеет поле
Пример использования этого:
List<String> list = new ArrayList<String>(
Arrays.asList("A", "B", "C", "aa", "bb", "cc")
);
Collections.sort(list);
System.out.println(list);
// prints "[A, B, C, aa, bb, cc]"
Collections.sort(list, String.CASE_INSENSITIVE_ORDER);
System.out.println(list);
// prints "[A, aa, B, bb, C, cc]"
Вот пример сортировки List<String>
с использованием как естественного упорядочения, так и вашего собственного Comparator<String>
. Обратите внимание, что мы определили наш собственный Comparator<String>
, даже не изменив сам final class String
.
List<String> list = new ArrayList<String>(
Arrays.asList("1", "000000", "22", "100")
);
Collections.sort(list);
System.out.println(list);
// prints "[000000, 1, 100, 22]" natural lexicographical ordering
Comparator<String> lengthComparator = new Comparator<String>() {
@Override public int compare(String s1, String s2) {
return Integer.valueOf(s1.length())
.compareTo(s2.length());
}
};
Collections.sort(list, lengthComparator);
System.out.println(list);
// prints "[1, 22, 100, 000000]" ordered by length
Comparator<String> integerParseComparator = new Comparator<String>() {
@Override public int compare(String s1, String s2) {
return Integer.valueOf(Integer.parseInt(s1))
.compareTo(Integer.parseInt(s2));
}
};
Collections.sort(list, integerParseComparator);
System.out.println(list);
// prints "[000000, 1, 22, 100]" ordered by their values as integers
Заключение
Вы можете следовать примеру, установленному String
, и сделать что-то вроде этого:
public class Check implements Comparable<Check> {
public static final Comparator<Check> NUMBER_ORDER = ...
public static final Comparator<Check> AMOUNT_ORDER = ...
public static final Comparator<Check> SOMETHING_ELSE_ORDER = ...
}
Затем вы можете отсортировать List<Check>
следующим образом:
List<Check> checks = ...;
Collections.sort(checks, Check.AMOUNT_ORDER);