Сортировка списка объектов с использованием 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)),

Другие вопросы по тегам