Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 流和Lambda表达式按降序排序_Java_Lambda_Java 8 - Fatal编程技术网

Java 流和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"

您好,我使用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","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);