学生和课程有两个简单的对象,如下所示:

public class Student {
    List<Course> courses;
    ...
}
public class Course {
    String name;
    ...
}


如果我们的listStudents,我们如何通过课程名称过滤某些学生?


首先,我尝试flatMap回答这个问题,但是它返回了课程
对象而不是学生对象。
然后我使用allMatch(以下代码)。
但是,它返回学生列表,但List始终为空。是什么
问题?


List<Student> studentList;
List<Student> AlgorithmsCourserStudentList = studentList.stream().
    filter(a -> a.stream().allMatch(c -> c.getCourseName.equal("Algorithms"))).
    collect(Collectors.toList());

最佳答案

您需要anyMatch

List<Student> studentList;
List<Student> algorithmsCourseStudentList =
    studentList.stream()
               .filter(a -> a.getCourses()
                             .stream()
                             .anyMatch(c -> c.getCourseName().equals("Algorithms")))
               .collect(Collectors.toList());



allMatch仅会给您Student所有他们的Course都命名为"Algorithms"
anyMatch将为您提供所有至少具有一个名为StudentCourse"Algorithms"

10-08 18:18