Итерация по списку с использованием rxjava2 - PullRequest
0 голосов
/ 26 мая 2018

У меня есть список пользовательских объектов (List<Item> itemsList).Вот мой пользовательский класс:

public class Item {
    private String itemId;
    private String itemName;
}

В начальном списке есть только itemName;ItemId будет пустым.Я хочу перебрать список и добавить itemId для каждого элемента, а затем с новым списком мне нужно проделать какую-то длинную операцию с каждым элементом в списке.

for(Item item : itemsList){
item.setitemId = getUniqueId(); //getUniqueId() returns an unique id
doSomeLongOperation(item);
}

Я являюсьновичок в операторах rxjava.Пожалуйста, помогите мне с тем, как добиться того же, используя rxjava2.

Спасибо!

1 Ответ

0 голосов
/ 26 мая 2018

Используйте Observable.fromIterable для итерации всего элемента в Списке и Subscribe в фоновом потоке для выполнения фоновой работы, затем используйте оператор Map для обновления Item и выполняете ли вы длительную работу.После окончания верните то, что вам нужно.

Пример кода:

        Observable.fromIterable(itemList)
            .subscribeOn(Schedulers.io())
            .map(new Function<Item, Item>() {
                @Override
                public Item apply(Item item) throws Exception {
                     item.setItemId("Id: " +  System.currentTimeMillis());
                      Log.i(TAG, "In Map Item: " + item.toString());
                      // do some long operation and return 

                     return item;
                }
            })
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Consumer<Item>() {
                @Override
                public void accept(Item item) throws Exception {
                    Log.i(TAG, "Item: " + item.toString());
                }
            });
...