Задать вопрос
BariSovich
@BariSovich
Начинающий Java dev

Как можно оптимизировать данный код сортировки в Java?

Всем привет. Помогите если не трудно.
Выполнил задание и теперь пытаюсь понять как его оптимизировать чтобы выглядело нормально. Потому что то что приходит в голову выглядит отнюдь не нормально.
Есть две сортировки одного массива объектов одного и того же класса.
Нужно чтобы они отсортировались от меньшего к большему учитывая определенные свойства, но с учетом что ячейки содержащие null должны оказаться в самом конце массива, а перед ними все ячейки у которых определенные поле равно 0 или null (в зависимости от того по какому полу делается сортировка).
Вот код:
Arrays.sort(devices, new Comparator<Device>() {
                @Override
                public int compare(Device o1, Device o2) {
                    if (o1 == null && o2 == null) {
                        return 0;
                    }
                    if (o1 == null) {
                        return 1;
                    }
                    if (o2 == null) {
                        return -1;
                    }
                    if (o1.getIn() == 0) {
                        return 1;
                    }
                    if (o2.getIn() == 0) {
                        return -1;
                    }
                    return Integer.compare(o1.getIn(), o2.getIn());
                }
            });

Arrays.sort(devices, new Comparator<Device>() {
                @Override
                public int compare(Device o1, Device o2) {
                    if (o1 == null && o2 == null) {
                        return 0;
                    }
                    if (o1 == null) {
                        return 1;
                    }
                    if (o2 == null) {
                        return -1;
                    }
                    if (o1.getProductionDate() == null) {
                        return 1;
                    }
                    if (o2.getProductionDate() == null) {
                        return -1;
                    }
                    return o1.getProductionDate().compareTo(o2.getProductionDate());
                }
            });

Пробовал выносить сортировку в отдельный метод, но выглядит аморально. Я не прошу написать за меня мое задание. Ни в коем случае. Если можете, подкиньте идею как это реализовать. А реализую сам. Хелп.
  • Вопрос задан
  • 306 просмотров
Подписаться 2 Оценить 5 комментариев
Решения вопроса 1
@red-barbarian
У Вас есть в Компараторах две части
1. сравнение с нул
2. сравнение неких полей.
сравнение с нул дублируется. это уже плохо. нужно выносить за пределы этих двух классов.
сравнение двух полей однотипно. т.е. взяли некое поле и сравнили его компареТу. тоже похоже дублируются.

Можно сделать свой компаратор, но с параметром -
будет примерно так
sort(new MyDeviceComparatorOn(Device::getIn))
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы