可观察集合中的过滤列表

时间:2020-02-26 21:27:19

标签: android kotlin rx-java2

我想通过指定事件过滤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>的原始响应类型而不是{ {1}}就像这里:

Observable<Notification>

最简单的方法是在return service.getNotifications(page) .flatMap { Observable.fromIterable(it.items) } .filter {it.event == "STORY"} 的演示者类中应用filter函数,但是我想归纳一下我的解决方案,因为在不同的地方调用了助手类中的方法。所以我想在这里过滤列表。

那么,有没有办法过滤flatMap集合中的列表并返回Observable的原始响应类型?

1 个答案:

答案 0 :(得分:0)

您应该同时使用“过滤器”和“任何”。

class Test {
    init {
       val testList = listOf(
               TestData("1","1", listOf("1a")),
               TestData("2","2", listOf("2b")),
               TestData("3","3", listOf("3c")))

        val result = testList.filter { item ->
            item.c.any { it == "STORY" }
        }
    }
}

data class TestData(val a: String, val b: String, val c: List<String>)
相关问题