Я пытался изучить RxJava2, и я боролся с этим.
Итак, у меня есть структура, представляющая события, которые выглядят примерно так:
class Event{
public Date when;
public String eventName;
}
И где-то я запрашиваю список событий из репозитория, которые хочу сгруппировать по дате.
Итак, учитывая список событий, таких как:
- Event1 в июне
- Event2 в июне
- Event3 в июле
- Event4 в августе
- Event5 в августе
Я хочу сгруппировать их так, чтобы
- June
- Event1
- Событие2
- July
- Event3
- August
- Event4
- Событие5
То, что у меня есть до сих пор, на мой взгляд, очень уродливо, и я почти уверен, что переусердствую с этим...
repository.getAllEvents()
.toObservable()
.flatMap(new Function<Events, Observable<Event>>() {
@Override
public Observable<Event> apply(@NonNull Events events) throws Exception {
return Observable.fromIterable(events.getEvents());
}
})
.groupBy(new Function<Event, Date>() {
@Override
public Date apply(@NonNull Event event) throws Exception {
return event.when;
}
})
.flatMap(new Function<GroupedObservable<Date, Event>, Observable<Object>>() {
@Override
public Observable<Object> apply(@NonNull GroupedObservable<Date, Event> dateEventGroupedObservable) throws Exception {
final Date key = dateEventGroupedObservable.getKey();
return dateEventGroupedObservable.toList().toObservable().flatMap(new Function<List<Event>, ObservableSource<?>>() {
@Override
public ObservableSource<?> apply(@NonNull List<Event> events) throws Exception {
return Observable.just(new Pair<Date, List<Event>>(key, events));
}
});
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new Observer<Object>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Object o) {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
На данный момент это дает мне наблюдаемую, которая доставляет Pair>, но, как вы можете видеть, она преобразуется в Object, и я, честно говоря, не могу разобраться в этом аду дженериков -.-'
Любые советы о том, как я мог подойти к этому?
Спасибо