Я пытаюсь отсортировать сначала по марке автомобиля, затем по году автомобиля, а затем по пробегу.Все поля являются строками.
A) Вы должны изменить свой дизайн.Год должен быть int, пробег должен быть int, float или объектом, состоящим из одного из них и Unit.Строки просто не правильное представление.Кроме того, если вы используете их в Comparator, вам придется преобразовывать их в правильный тип, по крайней мере, один раз за сравнение, что ужасно неэффективно,
b) Для реализации Comparators вы, вероятно, захотите использоватьвнешняя библиотека.И Guava, и Commons / Lang довольно хороши в этом.В следующем примере я предполагаю, что Год и Пробег являются числовыми.
Гуава (ComparisonChain
):
public int compare(Car o1, Car o2) {
return ComparisonChain.start()
.compare(o1.getYear(), o2.getYear())
.compare(o1.getMileage(), o2.getMileage())
.compare(o1.getMake(), o2.getMake())
.getResult();
}
Commons / Lang (CompareToBuilder
):
public int compare(Car o1, Car o2) {
return new CompareToBuilder()
.append(o1.getYear(), o2.getYear())
.append(o1.getMileage(), o2.getMileage())
.append(o1.getMake(), o2.getMake())
.toComparison();
}
Как видите, обе версии оченьпохожи, а также гораздо проще, чем сами кодировать.