(五)变换flatmap

Student[] students = ...;
Subscriber subscriber = new Subscriber() { 
    @Override 
    public void onNext(Course course) { 
    Log.d(tag, course.getName()); 
    } 
  ...
};

Observable.from(students) 
    .flatMap(new Func1>() { 
    @Override 
    public Observable call(Student student) { 
    return Observable.from(student.getCourses()); 
    } 
}) 
.subscribe(subscriber);

flatMap()的原理是这样的:

  1. 使用传入的事件对象创建一个 Observable对象;
  2. 并不发送这个 Observable, 而是将它激活,于是它开始发送事件;
  3. 每一个创建出来的 Observable发送的事件,都被汇入同一个 Observable,而这个 Observable负责将这些事件统一交给 Subscriber的回调方法。

这三个步骤,把事件拆成了两级,通过一组新创建的 Observable
将初始的对象『铺平』之后通过统一路径分发了下去。而这个『铺平』就是 flatMap()所谓的 flat。

你可能感兴趣的:((五)变换flatmap)