学生和课程有两个简单的对象,如下所示:
public class Student {
List<Course> courses;
...
}
public class Course {
String name;
...
}
如果我们的
list
为Students
,我们如何通过课程名称过滤某些学生?首先,我尝试
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
将为您提供所有至少具有一个名为Student
的Course
的"Algorithms"
。