标识当前正在处理的元素

时间:2018-11-12 14:41:52

标签: java java-8 observable rx-java2

我想知道如何识别当前正在处理数组中的哪个元素。例如 我想打印以下内容:

e
1
Element1 consumed
e
2
Element2 consumed
e
3
Element2 consumed

请问如何修改以下代码以获得给定的结果。

代码

public static void main(String[] args) {
    Observable<String> stringObservable = Observable.just("e1", "e2", "e3");
    stringObservable
    .map(x->x.split(""))//return non-observable
    .flatMap(y->Observable.fromArray(y)//return observable
            .map(n->n))
    .observeOn(Schedulers.io())
    .blockingSubscribe(getObserver());
}

2 个答案:

答案 0 :(得分:1)

在用于拆分源项目的内部序列上使用doOnNextdoOnComplete

public static void main(String[] args) {
    Observable<String> stringObservable = Observable.just("e1", "e2", "e3");

    stringObservable
    .flatMap(x ->
        Observable.fromArray(x.split(""))
        .doOnNext(n -> 
            System.out.println(n)) // <-------------------- prints each split item
        .map(n->n)
        .doOnComplete(() -> 
            System.out.println(
               "Element " + x + " consumed")) // <--------- end of processing of x
    )
    .observeOn(Schedulers.io())
    .blockingSubscribe(getObserver());
}

答案 1 :(得分:0)

您可能想看一下doOnEach运算符,可以让他们在那里打印 http://reactivex.io/RxJava/javadoc/rx/Observable.html#doOnEach(rx.functions.Action1)