Observable
发出的值Observable
subscribe()
后执行函数Observable
,进而执行这个Observable
里的订阅动做2
步聚中 Observable
输出的值,收集完成后,发出这些值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