Страницы

Поиск по вопросам

понедельник, 19 ноября 2018 г.

Двойное условие сортировки листа ( Comparator )

Имеется класс:
public class Man (){
private int rating1; private int rating2;
Man (int rating1, int rating2){ this.rating1 = rating1; this.rating2 = rating2; }
public int getRating1(){ return rating1; }
public int getRating2(){ return rating2; } }
Формируется List по rating2 (по убыванию):
public class MyComporatorByRating implements Comparator {
@Override public int compare(man o1, man o2) { return Integer.compare(o2.getRating1(), o1.getRating1()); }
}
Что необходимо добавить в MyComporatorByRating, чтобы вначале списка были только те Man, у которых rating2 от 1 до 5 в порядке возрастания.
Т.е. первыми в списке List были отсортированы Man по значению rating2 от 1 до 5 (значения rating1 у них игнорируются), а потом все остальные Man по rating1 от 100 до 0 (значение rating2 у них 0)?


Ответ

public class Man {
private int rating1; private int rating2;
Man(int rating1, int rating2) { this.rating1 = rating1; this.rating2 = rating2; }
public int getRating1() { return rating1; }
public int getRating2() { return rating2; }
public CompareWith getCompareWith() { if(rating2 >= 1 && rating2 <= 5) { return CompareWith.RATING2; } return CompareWith.RATING1; }
public enum CompareWith { RATING1, RATING2 } }
И компаратор:
public class MyComporatorByRating implements Comparator {
@Override public int compare(Man o1, Man o2) { if(CompareWith.RATING2.equals(o1.getCompareWith()) && CompareWith.RATING2.equals(o2.getCompareWith())) { return o1.getRating2() - o2.getRating2(); } else if(CompareWith.RATING2.equals(o1.getCompareWith())) { return 1; } else if(CompareWith.RATING2.equals(o2.getCompareWith())) { return -1; } else { return o2.getRating1() - o1.getRating1(); } }
}

Комментариев нет:

Отправить комментарий