我想根据子列表中的条件过滤父列表。父列表是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());
不确定如何完成这项工作。
提前谢谢大家。
答案 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>
感谢前一次的每一个人。它帮助我改进了我的代码。