Имеется класс:
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();
}
}
}
Комментариев нет:
Отправить комментарий