I have the List of SourceObjects and I need to convert it to the List of ResultObjects.
I can fetch one object to another using method of ResultObject:
convertFromSource(srcObj);
of course I can do it like this:
public void onNext(List<SourceObject> srcObjects) { List<ResultsObject> resObjects = new ArrayList<>(); for (SourceObject srcObj : srcObjects) { resObjects.add(new ResultsObject().convertFromSource(srcObj)); } }
but I will be very appreciate to someone who can show how to do the same using rxJava.
Pass the List<String> as a parameter to the constructor of a new ArrayList<Object> . List<Object> objectList = new ArrayList<Object>(stringList);
If your Observable
emits a List
, you can use these operators:
flatMapIterable
(transform your list to an Observable of items)map
(transform your item to another item) toList
operators (transform a completed Observable to a Observable which emit a list of items from the completed Observable)
Observable<SourceObjet> source = ... source.flatMapIterable(list -> list) .map(item -> new ResultsObject().convertFromSource(item)) .toList() .subscribe(transformedList -> ...);
If you want to maintain the Lists
emitted by the source Observable
but convert the contents, i.e. Observable<List<SourceObject>>
to Observable<List<ResultsObject>>
, you can do something like this:
Observable<List<SourceObject>> source = ... source.flatMap(list -> Observable.fromIterable(list) .map(item -> new ResultsObject().convertFromSource(item)) .toList() .toObservable() // Required for RxJava 2.x ) .subscribe(resultsList -> ...);
This ensures a couple of things:
Lists
emitted by the Observable
is maintained. i.e. if the source emits 3 lists, there will be 3 transformed lists on the other endObservable.fromIterable()
will ensure the inner Observable
terminates so that toList()
can be usedIf you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With