Перебирать список с помощью rxjava2

У меня есть список настраиваемых объектов (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.

Спасибо!


person Rakesh    schedule 26.05.2018    source источник


Ответы (1)


Используйте 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());
                }
            });
person Abu Yousuf    schedule 26.05.2018
comment
Спасибо за ответ. Будет ли долгая операция применяться к каждому элементу? - person Rakesh; 26.05.2018
comment
Да, это будет применяться ко всем элементам. - person Abu Yousuf; 26.05.2018
comment
Спасибо @Abu Yousuf. Дам попробовать! - person Rakesh; 26.05.2018
comment
Чем accept () отличается от onNext ()? Я также могу использовать здесь onNext (). - person Talha; 02.11.2018