Reputation: 80
I have the following Rx chain:
compositeDisposable.add(manager.getObservable()
.map(objects -> modelMapper.map(objects))
.map(modelObjects -> {
cache.save(modelObjects);
return modelObjects ;
})
.flatMapIterable(modelObjects -> modelObjects)
.sorted(objectComparator)
.toList()
.map(modelObjects -> viewModelMapper.map(modelObjects))
.subscribe(this::onObjectsLoaded));
I want to extract the operators flatMapIterable(modelObjects -> modelObjects)
, sorted(objectComparator)
and toList()
into a separate method that I can reuse in multiple Rx chains to sort the objects, so the chain will look something like this:
compositeDisposable.add(manager.getObservable()
.map(objects -> modelMapper.map(objects))
.map(modelObjects -> {
cache.save(modelObjects );
return modelObjects ;
})
.compose(sortObjects())
.map(modelObjects -> viewModelMapper.map(modelObjects))
.subscribe(this::onObjectsLoaded));
Is is possible to create such a method? Thanks!
Upvotes: 1
Views: 442
Reputation: 69997
Define a method that takes an Observable
and returns an Observable
:
static <T> Observable<List<T>> sortListItem(Observable<List<T>> source,
Comparator<? super T> comparator) {
return source.flatMapIterable(v -> v)
.toSortedList(comparator)
.toObservable();
}
compositeDisposable.add(manager.getObservable()
.map(objects -> modelMapper.map(objects))
.map(modelObjects -> {
cache.save(modelObjects);
return modelObjects ;
})
.compose(ThisClass::sortListItem)
.map(modelObjects -> viewModelMapper.map(modelObjects))
.subscribe(this::onObjectsLoaded));
Upvotes: 3