例如,我有以下使用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执行此操作的最佳方法是什么?
答案 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()
完成的线程上。