Сортировка по двум параметрам(Java)

172
29 марта 2018, 08:51

Здравствуйте, cтолкнулся с такой проблемой, что надо отсортировать ArrayList по двум параметрам, по имени владельца и по цене комнаты

На данный момент вот так выглядит класс комната

class Room {
String Name;
String Surname;
String RoomS;
int RoomN;
int RoomQ;
float cost;


Room(String Name,String Surname,String RoomS,int RoomN,int RoomQ,float cost) {
    this.Name=Name;
    this.Surname=Surname;
    this.RoomS=RoomS;
    this.RoomN=RoomN;
    this.RoomQ=RoomQ;
    this.cost=cost;
}}

Все эти данные считываются из файла. На данный момент у меня получилось лишь сравнить только по цене.А надо чтобы сравнивалось одновременно и по имени владельца, и по цене комнаты.

Так выглядит мой компаратор на данный момент

Collections.sort(r, new Comparator<Room>() {
        @Override
        public int compare(Room r1, Room r2) {
            int result = (int) (r2.cost - r1.cost);
            if(result != 0) {
                return result;
            }
            return 0;
        }
    });

Без понятия, как это сделать.

Добавил потом к классу комнаты

public String getName() {
    return Name;
}

И код, который был предложен ниже заработал. !!!! ВНИМАНИЕ !!!! Найдем баг, первую букву он почему-то кидает в конец, а потом идет правильно, решить не знаю как!

Answer 1
Collections.sort(r, new Comparator<Room>() {
    @Override
    public int compare(Room r1, Room r2) {
        int result = (int) (r2.cost - r1.cost);
        if(result != 0) {
            return result;
        }else{
            return r1.getName().compareTo(r2.getName());            
        }
    }
});

вам не хватило всего 1 блока else. Сначала вы сравниваете цену, если вернулся 0 (цены равны), то возвращаете результат сравнения имен (без разницы какой).

READ ALSO
Как ограничить доступ к файлу

Как ограничить доступ к файлу

Добрый деньПотратил полтора дня на то, чтобы найти способ создать файл так, чтобы к нему не имел доступа пользователь ну или имел, но разобрать...

120
Как создать функционал EditText и TextView в одном поле?

Как создать функционал EditText и TextView в одном поле?

Требуется следующее - пользователь видит строчку "Введите Вашу цель" нажимает на данную строчку, добавляет текст и по нажатию на кнопку "ок"...

146
Развернуть Grails wat на Tomcat 9

Развернуть Grails wat на Tomcat 9

голос «против» Помогите развернуть Grails на TomcatЯ с помощью idea создал простое grails приложение, добавил один контроллер и сделал war с помощью команды...

164
NullPointerException в классе прохождения лабиринта

NullPointerException в классе прохождения лабиринта

Пытаюсь написать прохождение лабиринта, но при запуске код прохождения падает в NullPointerExceptionСам лабиринт в консоль выводится без проблем

118