flatMap 运算符

flatMap 运算符可帮助你将一个事件转换为另一个事件(或将事件转换为零,一个或多个事件)。

当你想要调用另一个返回 Observable 的方法时,它是一个完美的运算符

 public Observable<String> perform(int i) {
      // ...
 }

 Observable.just(1, 2, 3)
           .flatMap(i -> perform(i))
           .subscribe(result -> System.out.println("result ->" + result);

flatMap 将序列化 perform 订阅, perform 发出的事件可能不会被订购。因此,你可能会在第一次 perform 调用的事件之前收到上次执行调用所发出的事件(你应该使用 concatMap 代替)。

如果你在订阅者中创建另一个 Observable则应使用 flatMap 代替。主要思想是: 永远不要离开 Observable

例如 :

 Observable.just(1, 2, 3)
           .subscribe(i -> perform(i));

可以很容易地被替换为:

 Observable.just(1, 2, 3)
           .flatMap(i -> perform(i))
           .subscribe();

Reactivex.io 文档: http//reactivex.io/documentation/operators/flatmap.html