Как передать модифицированный список вниз по течению в RxJava в Android? - PullRequest
0 голосов
/ 14 сентября 2018

У меня следующий код, который хорошо работает.

Observable.from(...)
    .map { // List<Object>
        if (My_Condition_is_true) {
            //...
        }
        val newList = getNewListIfConditionIsOkay(it)
        newList.map { item -> toSomethingElse(item) }
    }
    .subscribeBy(myErrorFun) {
        //...
    }

Я чувствую, map оператор не выглядит круто, но я понятия не имею, как это исправить. Это то, что у меня на уме.

Observable.from(...)
        .doOnNext {// List<Object>
            if (My_Condition_is_true) {
                //...
                return getNewListIfConditionIsOkay(it)
            }
            return it
        .map { // List<Object>
            it.map { item -> toSomethingElse(item) }
        }
        .subscribeBy(myErrorFun) {
            //...
        }

My Observable возвращает только список. Какова ваша рекомендация?

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

(я не знаю, полностью ли я понимаю вашу идею или нет)

Насколько я знаю, в настоящее время ни один оператор не позволяет нам делать то, что вы хотите.Итак, чтобы решить вашу проблему, я всегда стараюсь комбинировать операции.

Пожалуйста, смотрите детали ниже:

Первый: метод для получения вашего списка

private List getYourList() {
    // do something here to get your list
    return yourList;
}

Второй: метод для получения списка с условием, не забывайте использовать Observable.fromCallable

private Observable<List> getListWithCondition() {
       return Observable.fromCallable(new Callable<List<Employee>>() {
        @Override
        public List<Employee> call() throws Exception {
            // check your condition if needed
            if (My_Condition_is_true) {
              //...
            }
            val newList = getNewListIfConditionIsOkay(it);
            return newList;
        }
    });

}

Наконец, сделайте свою работу, вызвав функцию выше

public void doYourWork() {
    getListWithCondition().map(new Func1<List<>, Object>() {
        item -> toSomethingElse(item)
    }).subscribe();
}

Пожалуйста, дайте мне знать, если я не понимаю вашу точку зрения правильно, я удалю свой ответ.Надеюсь, что поможет.

0 голосов
/ 15 сентября 2018

map в порядке. Сохраните doOnNext для задач с побочными эффектами, doOnNext на самом деле не возвращает никакого значения, поэтому я не думаю, что ваш код будет работать здесь.

...