Я хочу отфильтровать List <Notification>
, который находится внутри Observable
коллекции по указанному событию.
Вот вызов дооснащения:
@GET("/notifications")
Observable<NotificationCollection> getNotifications(@Query("page") Integer page);
NotificationCollection
модель:
class NotificationCollection {
var items: List<Notification>? = null
var pagination: Pagination? = null
}
Notification
модель:
class Notification {
var event: String? = null
var id: Long? = null
var data: NotificationData? = null
}
В своем классе помощника я возвращаю Observable
интерактору:
override fun getNotifications(page: Int): Observable<NotificationCollection> {
return service.getNotifications(page)
}
Я попробовал несколько подходов:
override fun getNotifications(page: Int): Observable<NotificationCollection> {
return service.getNotificationsTimeline(page)
.filter { it.items?.get(0)?.event == "STORY"}
}
Здесь я хочу применить предикат ко всем элементам списка, а не только к тем, которые я определяю по индексу. Есть ли способ сделать что-то вроде .filter { it.items.event = "STORY"}
?
Другой подход, который я попытался использовать flatMap
, который имеет для меня больше смысла, но я не вижу способа сопоставить отфильтрованный результат с оригиналом тип ответа Observable<NotificationCollection>
, а не Observable<Notification>
, как здесь:
return service.getNotifications(page)
.flatMap { Observable.fromIterable(it.items) }
.filter {it.event == "STORY"}
Самый простой способ - применить filter
в моем классе докладчика с помощью flatMap
, но я хочу обобщить свой решение, потому что метод в классе помощника вызывается в разных местах. Поэтому я хочу сделать список отфильтрованным здесь.
Итак, есть ли способ отфильтровать список в коллекции Observable
и вернуть исходный тип ответа Observable<NotificationCollection>
?