Java8 - 使用Streams& amp;基于Child列表中的条件过滤父列表。拉姆达

时间:2018-02-19 21:04:58

标签: java filter java-stream

我想根据子列表中的条件过滤父列表。父列表是List,子列表是List。我想获得第一个科目标记大于或等于70的学生名单。

        // College Class which has list of students.           
        public class College {
            private long collegeId;
            private List<Student> students;
         }

        // Student class which has list of subjects.
        public class Student {
            private long studentId;
            private List<Subject> subjects;
        }

        // Subject class.
        public class Subject {
            private long subjectId;
            private String subjectName;
            private long marks;
        }

现在我想得到所有第一个科目标记> 70的学生名单。

我正在尝试下面的事情;但得到&#34; java.lang.ArrayIndexOutOfBoundsException:27745&#34;。

        List<Student> distinctionStudents = college.getStudents().stream().filter(s -> s.getSubjects().get(0).getMarks()>=70).collect(Collectors.toList());

不确定如何完成这项工作。

提前谢谢大家。

2 个答案:

答案 0 :(得分:0)

请尝试以下方法:

    List<Student> list = students.stream()
            .filter(student -> !student.getSubjects().isEmpty())
            .filter(student ->
                    student.getSubjects().stream().findFirst().get().getMarks() >= 70)
            .collect(Collectors.toList());

例如,对于下面的学生列表:

    List<Student> students = new ArrayList<>();
    students.add(new Student(1, new ArrayList<>()));
    students.add(new Student(1, Arrays.asList(
            new Subject(1, "A", 67),
            new Subject(2, "B", 76))));
    students.add(new Student(2, Arrays.asList(
            new Subject(1, "A", 99),
            new Subject(3, "C", 77))));

输出(当然是提供适当的方法,如toString):

list = [Student{studentId=2, subjects=[Subject{subjectId=1, subjectName='A', marks=99}, Subject{subjectId=3, subjectName='C', marks=77}]}]

答案 1 :(得分:0)

我找到了答案;我在使用Jersey 1.8库;并已移至下方并且已经有效。

<!-- https://mvnrepository.com/artifact/com.sun.jersey/jersey-bundle -->
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-bundle</artifactId>
    <version>1.19.2</version>
</dependency>

感谢前一次的每一个人。它帮助我改进了我的代码。