Moh*_*nIT 2 java collections lambda java-8 java-stream
学生和课程有两个普通对象,如下所示:
public class Student {
List<Course> courses;
...
}
public class Course {
String name;
...
}
Run Code Online (Sandbox Code Playgroud)
如果我们有一个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());
Run Code Online (Sandbox Code Playgroud)
你需要anyMatch:
List<Student> studentList;
List<Student> algorithmsCourseStudentList =
studentList.stream()
.filter(a -> a.getCourses()
.stream()
.anyMatch(c -> c.getCourseName().equals("Algorithms")))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
allMatch只会给你Student他们所有人Course的名字"Algorithms".
anyMatch会给你所有Student至少有一个Course名字的人"Algorithms".