How do I use Comparator to define a custom sort order?
Как мне использовать Comparator для определения пользовательского порядка сортировки?
Я хочу разработать демонстрационную версию сортировки для списка автомобилей. Я использую таблицу данных для отображения списка автомобилей. Теперь на самом деле я хочу отсортировать список по цвету автомобиля. Здесь сортировка не по алфавиту. Я хочу использовать свой пользовательский порядок сортировки, например, сначала красная машина, затем синяя и т.д.
Для этого я пытаюсь использовать Java Comparator и Comparable, но это позволяет сортировать только в алфавитном порядке.
Итак, кто-нибудь может подсказать мне, как реализовать используемый метод, чтобы сортировка стала быстрее.
// Now here I am confuse how to implement my custom sort } }
Переведено автоматически
Ответ 1
Я рекомендую вам создать перечисление для цветов вашего автомобиля вместо использования строк, и естественным порядком перечисления будет порядок, в котором вы объявляете константы.
publicenumPaintColors { SILVER, BLUE, MAGENTA, RED }
@Override publicintcompare(final Car o1, final Car o2){ // let your comparator look up your car's color in the custom order return Integer.valueOf( definedOrder.indexOf(o1.getColor())) .compareTo( Integer.valueOf( definedOrder.indexOf(o2.getColor()))); } };
В принципе, я согласен, что использование enum - еще лучший подход, но эта версия более гибкая, поскольку позволяет определять разные порядки сортировки.
Обновить
УGuava эта функциональность встроена в его Ordering класс: