RxJava 操做符

RxJava 操做符

flatMap

  • 參數
    1. 接收一個函數
    2. 這個函數接收源 Observable 發出的值
    3. 這個函數返回 Observable
  • 流程
    1. subscribe() 後執行函數
    2. 而後訂閱函數返回的 Observable,進而執行這個Observable裏的訂閱動做
    3. 收集全部第2步聚中 Observable 輸出的值,收集完成後,發出這些值
  • 注意點
    1. 最後發出的值順序與函數接收到值的順序不相關,取決於流程3中各 Observable 輸出的順序
  • 示例代碼與結果
@Test public void flatMap2() throws Exception {
    final List<String> items = Lists.newArrayList("a", "b", "c", "d", "e", "f");
    final TestScheduler scheduler = new TestScheduler();
    Observable.fromIterable(items)
        .flatMap((Function<String, ObservableSource<String>>) s -> {
            System.out.println("x-" + s);
            final int delay = new Random().nextInt(15);
            return Observable.create((ObservableOnSubscribe<String>) emitter -> {
                System.out.println("y-" + s);
                emitter.onNext(s);
                emitter.onComplete();
            }).delay(delay, TimeUnit.SECONDS, scheduler); // 這裏 delay 時長不一樣,致使最終數據順序變化
        })
        .subscribe(System.out::println);
    scheduler.advanceTimeBy(1, TimeUnit.MINUTES);
}

x-a y-a x-b y-b x-c y-c x-d y-d x-e y-e x-f y-f f e b d a cjava

相關文章
相關標籤/搜索