使用Java Stream从一组集合中收集所有对象

时间:2016-09-13 09:45:26

标签: java java-8 java-stream

我尝试学习Java Streams并尝试从HashSet<Person>获取HashSet<SortedSet<Person>>

HashSet<Person> students = getAllStudents();
HashSet<SortedSet<Person>> teachersForStudents = students.stream().map(Person::getTeachers).collect(Collectors.toCollection(HashSet::new));
HashSet<Person> = //combine teachers and students in one HashSet

我真正希望将所有教师和所有学生合并为一个HashSet<Person>。当我收集我的信息流时,我想我做错了什么?

1 个答案:

答案 0 :(得分:5)

您可以flatMap将每个学生分成由学生和他们的老师组成的小组:

HashSet<Person> combined = 
    students.stream()
            .flatMap(student -> Stream.concat(Stream.of(student), student.getTeachers().stream()))
            .collect(Collectors.toCollection(HashSet::new));

concat用于连接教师的Stream,由学生自己组成的Stream,使用of获得。