RxJava:如何处理多个线程中的事件

时间:2018-05-16 20:49:43

标签: java multithreading rx-java rx-java2

例如,我有以下使用RxJava库的代码:

public class MultithreadingExample {
public static void main(String[] args) throws InterruptedException {
    Observable.from(Lists.newArrayList(1, 2, 3, 4, 5))
            .observeOn(Schedulers.computation())
            .map(numberToString())
            .subscribe(printResult());
    Thread.sleep(10000);
}

private static Func1<Integer, String> numberToString() {
    return number -> {
        System.out.println("Operator thread: " + Thread.currentThread().getName());
        return String.valueOf(number);
    };
}

private static Action1<String> printResult() {
    return result -> {
        System.out.println("Subscriber thread: " + Thread.currentThread().getName());
        System.out.println("Result: " + result);
    };
}

}

我希望在Observer中通过多个线程处理事件,例如,Thread-1的项目'1',Thread-2的项目'2'等等。

使用RxJava执行此操作的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

您可以使用flatMap()运算符。

Observable.from(Lists.newArrayList(1, 2, 3, 4, 5))
        .flatMap( number -> Observable.defer( numberToString() )
                              .subscribeOn( Schedulers.computation() ) )
        .observeOn(Schedulers.computation())
        .map(numberToString())
        .subscribe(printResult());

flatMap()运算符将在(可能是新的)线程上订阅新的observable,将结果合并到最终observeOn()完成的线程上。