stream中的flatmap是stream的一种中间操作,它和stream的map一样,是一种收集类型的stream中间操作,但是与map不同的是,它可以对stream流中单个元素再进行拆分(切片),从另一种角度上说,使用了它,就是使用了双重for循环。
查看Stream源码中flatmap的方法定义:
Stream flatMap(Function super T, ? extends Stream extends R>> mapper)
从方法的定义可以看出,其入参是一个函数式接口,该接口的返回类型应该是Stream< ? extends R > 类型的。
从实际需求中查看如何使用flatmap:
需求:有一个补习学校,其中有若干老师教学若干门课程,现在学校有关于数学教学的通知要传达给所有学数学的学生家长,将电子邮件发送到他们的邮箱中。
注意:一个老师可以教学多个科目,一个老师可以教学多个学生,一个学生可以报名多个科目,一个学生可以有多个家长。
数据结构(均省略get/set, toString ,构造器):
//老师
public classTeacher {privateString id;privateString name;privateString subject;
}//学生
public classStudent {privateString id;privateString name;privateString techId;//重写hashCode及equals方法(id及name相同就为同一个学生)
}//家长
public classPar