我有一个带有好友连接的数据库表:
下一个示例仅是Imagined
的示例,因此请不要建议我以其他方式实现它。
FriendConnection:
我有一个带有这些ID的列表。
val friendConnections = arrayListOf(
FriendConnection(id=10, humanId=141),
FriendConnection(id=13, humanId=142)
)
我想用RxJava列出结果列表。
val friendList = arrayListOf(
Friend(friendConnectionId = 10, humanId = 141, humanInstance = (...)),
Friend(friendConnectionId = 13, humanId = 142, humanInstance = (...))
)
我如何获得一个人?
fun getHumanById(id: Long) : Single<Human>
所以我需要迭代friendConnections
并为每个人类进行一次呼叫。比我需要将带有新的Human实例的FriendConnection映射到Friend实例。
我尝试过,但是不起作用:
Observable.fromIterable(arrayListOf(
FriendConnection(id=10, humanId=141),
FriendConnection(id=13, humanId=142)
))
.flatMapSingle { friendConnection ->
repository.getHumanById(friendConnection.humanId)
?.map {human ->
Friend(friendConnection.id,friendConnection.humanId,human)
}
}
.toList()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ it ->
Timber.i("friendList is here: $it")
}, {
throw it
})
有人知道怎么了? (我想用Rx而不是Room来实现)
答案 0 :(得分:0)
您可以这样做,
Observable.fromIterable(friendConnections)
.flatMap { Observable.just(Friend(it.id, it.humanId, repository.getHumanById(it.humanId).blockingGet())) }
.toList()
.subscribe {it --> /*Your Operation*/
答案 1 :(得分:0)
此解决方案适合您吗?
Observable.fromIterable(
listOf(
FriendConnection(1, 101),
FriendConnection(2, 102)
)
)
.flatMapSingle { connection ->
getHumanById(connection.humanId)
.map { human -> Friend(connection.id, connection.humanId, human) }
}
.toList()
.subscribe { list -> println(list) } //method reference generates error due to methods ambiguity
用于通过id获取人的模拟功能:
private fun getHumanById(id: Long): Single<Human> = Single.just(Human(id, id.toString()))