仅使用 Collection.sort() 和 lambda 对对象列表进行排序
Sort list of objects using Collection.sort() with lambdas only
我是 lambdas 的初学者,正在尝试了解它的工作原理。所以我有这个 Student 列表,其中包含 id 和 score 属性,我必须根据 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
我知道预期的错误我只是想展示我想要的。
那么有什么方法可以仅使用 lambda 来根据分数对 Student 对象进行排序吗?
我也看到了类似的 post ,我发现 List.sort
或 BeanComparator
是另一种选择,但是我有什么办法可以用 lambdas 做到这一点吗?
谢谢
(a, b) -> Integer.compare(a.score, b.score)
会起作用。 int
不是对象,它是原始类型,您不能调用 int.compareTo
或 int
上的任何其他方法。
甚至比那更好
Comparator.comparingInt(s -> s.score)
或者,getter,
Comparator.comparingInt(Student::getScore)
并且使用 List.sort
不会对您是否使用 lambda 或其他任何东西产生影响。你只要写 personList.sort(Comparator.comparingInt(s -> s.score))
而不是 Collections.sort(personList, Comparator.comparingInt(s -> s.score))
.
我是 lambdas 的初学者,正在尝试了解它的工作原理。所以我有这个 Student 列表,其中包含 id 和 score 属性,我必须根据 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
我知道预期的错误我只是想展示我想要的。
那么有什么方法可以仅使用 lambda 来根据分数对 Student 对象进行排序吗?
我也看到了类似的 post ,我发现 List.sort
或 BeanComparator
是另一种选择,但是我有什么办法可以用 lambdas 做到这一点吗?
谢谢
(a, b) -> Integer.compare(a.score, b.score)
会起作用。 int
不是对象,它是原始类型,您不能调用 int.compareTo
或 int
上的任何其他方法。
甚至比那更好
Comparator.comparingInt(s -> s.score)
或者,getter,
Comparator.comparingInt(Student::getScore)
并且使用 List.sort
不会对您是否使用 lambda 或其他任何东西产生影响。你只要写 personList.sort(Comparator.comparingInt(s -> s.score))
而不是 Collections.sort(personList, Comparator.comparingInt(s -> s.score))
.