Сортировка списка объектов с использованием Collection.sort() только с лямбдами
Я новичок в лямбдах и пытаюсь понять, как это работает. Итак, у меня есть список учеников с атрибутами id и Score, и я должен отсортировать их в соответствии с результатами. Мой код
import java.util.*;
class Student {
int id, score;
public Student(int id, int score) {
this.id = id;
this.score = score;
}
public String toString() {
return this.id + " " + this.score;
}
}
interface StudentFactory < S extends Student > {
S create(int id, int score);
}
class Test {
public static void main(String[] ad) {
StudentFactory < Student > studentFactory = Student::new;
Student person1 = studentFactory.create(1, 45);
Student person2 = studentFactory.create(2, 5);
Student person3 = studentFactory.create(3, 23);
List < Student > personList = Arrays.asList(person1, person2, person3);
// error in the below line
Collections.sort(personList, (a, b) -> (a.score).compareTo(b.score));
System.out.println(personList);
}
}
как видите, я пытался Collections.sort(personList, (a, b) -> (a.score).compareTo(b.score));
это дало мне ошибку int cannot be dereferenced
Я знаю ожидаемую ошибку, я просто хочу показать, что я хотел.
Так есть ли способ сортировки объекта Student по баллам, используя только лямбды?
Я также видел подобный пост, где я обнаружил, что List.sort
или же BeanComparator
другой вариант, но есть ли способ сделать это с лямбдами?
Спасибо
1 ответ
(a, b) -> Integer.compare(a.score, b.score)
должно сработать. int
это не объект, это примитив, и вы не можете вызвать int.compareTo
или любые другие методы int
,
Даже лучше, чем это было бы
Comparator.comparingInt(s -> s.score)
или, с геттером,
Comparator.comparingInt(Student::getScore)
И используя List.sort
не имеет значения, используете ли вы лямбды или нет. Ты просто пишешь personList.sort(Comparator.comparingInt(s -> s.score))
вместо Collections.sort(personList, Comparator.comparingInt(s -> s.score))
,