Java 流和Lambda表达式按降序排序
您好,我使用Lambda表达式对出生年份进行向下排序,但它不起作用。你能帮忙吗?您能在以下代码中检查我在哪里吗:Java 流和Lambda表达式按降序排序,java,lambda,java-8,Java,Lambda,Java 8,您好,我使用Lambda表达式对出生年份进行向下排序,但它不起作用。你能帮忙吗?您能在以下代码中检查我在哪里吗: final static List<Student> students = Arrays.asList( new Student("Joe","Clay",1994,Gender.MALE), new Student("Marie","Smith",1997,Gender.FEMALE), new Student("Ann"
final static List<Student> students = Arrays.asList(
new Student("Joe","Clay",1994,Gender.MALE),
new Student("Marie","Smith",1997,Gender.FEMALE),
new Student("Ann","Thompson",2000,Gender.FEMALE),
new Student("James","Bond",1989,Gender.MALE),
new Student("Jennifer","Atkins",1995,Gender.FEMALE),
new Student("Cristina","Gibbs",1999,Gender.FEMALE),
new Student("Jason","Clark",1998,Gender.MALE),
new Student("Kate","Barrett",1992,Gender.FEMALE),
new Student("Peter","Garner",1999,Gender.MALE),
new Student("Ben","Walsh",1996,Gender.MALE)
);
public static void runExercise8() {
List<Integer> years = students
.stream()
.sorted(Comparator.comparing(Student::getBirthYear).reverseOrder())
.collect(Collectors.toList());
System.out.println(years);
}
final static List students=Arrays.asList(
新生(“乔”,“克莱”,1994年,性别,男性),
新生(“玛丽”,“史密斯”,1997年,性别,女性),
新生(“安”,“汤普森”,2000年,性别,女性),
新生(“詹姆斯”,“邦德”,1989年,性别,男性),
新生(“詹妮弗”,“阿特金斯”,1995年,性别,女性),
新生(“克里斯蒂娜”,“吉布斯”,1999年,性别,女性),
新生(“Jason”,“Clark”,1998年,性别,男性),
新生(“凯特”,“巴雷特”,1992年,性别,女性),
新生(“彼得”,“加纳”,1999年,性别,男性),
新生(“本”,“沃尔什”,1996年,性别,男性)
);
公共静态无效运行练习8(){
列出年份=学生
.stream()
.sorted(Comparator.comparing(Student::getBirthYear).reverseOrder())
.collect(Collectors.toList());
系统输出打印单位(年);
}
考虑到接收者类型,您似乎希望结果是一个整数列表,表示排序后的年份:
List<Integer> years
另一方面,最好使用Comparator.comparingit
而不是Comparator。在这种情况下,比较
,因为前者更有效
例如:
.sorted(Comparator.comparingInt(Student::getBirthYear).reversed())
我想这里的根本问题是,您试图获取整数列表
list
,但您对学生进行排序。您需要在排序后添加.map(Student::getBirthYear)
以获取整数,或者将列表更改为列表
我建议您使用如下流:
List<Integer> years = students
.stream()
.map(s -> s.getBirthYear())
.sorted((Integer s1, Integer s2) -> -Integer.compare(s1, s2))
.collect(Collectors.toList());
如果您想获得学生列表,只需使用Comparators.reverse()
方法:
List<Student> sortedStudents = students
.stream()
.sorted(Comparator.comparing(Student::getBirthYear).reversed())
.collect(Collectors.toList());
System.out.println(sortedStudents);
或者,您也可以首先将学生映射到出生年份并对其进行排序,这可能会使比较步骤稍微简单。请解释。要澄清您的问题(包括错误消息或无效结果与预期结果等问题描述),请使用选项。
List<Integer> years = students
.stream()
.map(s -> s.getBirthYear())
.sorted((Integer s1, Integer s2) -> -Integer.compare(s1, s2))
.collect(Collectors.toList());
.sorted(Comparator.comparing((Student s) -> s.getBirthYear()).reversed())
List<Student> sortedStudents = students
.stream()
.sorted(Comparator.comparing(Student::getBirthYear).reversed())
.collect(Collectors.toList());
System.out.println(sortedStudents);
List<Integer> years = students
.stream()
.sorted(Comparator.comparing(Student::getBirthYear).reversed())
.map(Student::getBirthYear)
.collect(Collectors.toList());
System.out.println(years);