Определите, какой элемент в настоящее время обрабатывается - PullRequest
0 голосов
/ 12 ноября 2018

Я хотел бы знать, как я могу определить, какой элемент в массиве в настоящее время обрабатывается.например, я хотел бы напечатать следующее:

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 голосов
/ 13 ноября 2018

Используйте doOnNext и doOnComplete на внутренней последовательности, которая разделяет ваш исходный элемент:

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());
}
0 голосов
/ 13 ноября 2018

вы можете взглянуть на оператора doOnEach, вы можете сделать там печать http://reactivex.io/RxJava/javadoc/rx/Observable.html#doOnEach(rx.functions.Action1)

...