Student[] students = ...;
Subscriber<Course> subscriber = new Subscriber<Course>() {
@Override
public void onNext(Course course) {
Log.d(tag, course.getName());
}
...
};
Observable.from(students)
.flatMap(new Func1<Student, Observable<Course>>() {
@Override
public Observable<Course> call(Student student) {
return Observable.from(student.getCourses());
}
})
.subscribe(subscriber);
flatMap()的原理是這樣的:
- 使用傳入的事件對(duì)象創(chuàng)建一個(gè) Observable對(duì)象殊霞;
- 并不發(fā)送這個(gè) Observable, 而是將它激活拦止,于是它開始發(fā)送事件香璃;
- 每一個(gè)創(chuàng)建出來的 Observable發(fā)送的事件哨毁,都被匯入同一個(gè) Observable钓试,而這個(gè) Observable負(fù)責(zé)將這些事件統(tǒng)一交給 Subscriber的回調(diào)方法螟蝙。
這三個(gè)步驟恢恼,把事件拆成了兩級(jí),通過一組新創(chuàng)建的 Observable
將初始的對(duì)象『鋪平』之后通過統(tǒng)一路徑分發(fā)了下去胰默。而這個(gè)『鋪平』就是 flatMap()所謂的 flat场斑。