Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin RxJava2迭代列表并为每个项调用single_Kotlin_Rx Java2 - Fatal编程技术网

Kotlin RxJava2迭代列表并为每个项调用single

Kotlin RxJava2迭代列表并为每个项调用single,kotlin,rx-java2,Kotlin,Rx Java2,我有一个包含好友连接的数据库表: 下一个示例只是一个想象中的示例,因此请不要建议我以另一种方式实现它 友情连接: 身份证 人文的 我有一张有这些证件的名单 val friendConnections = arrayListOf( FriendConnection(id=10, humanId=141), FriendConnection(id=13, humanId=142) ) 我想用RxJava制作这个结果列表 val friendList = arrayListOf(

我有一个包含好友连接的数据库表:

下一个示例只是一个
想象中的
示例,因此请不要建议我以另一种方式实现它

友情连接:

  • 身份证
  • 人文的
我有一张有这些证件的名单

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>
有人知道怎么了?(我想用Rx实现它,而不是用Room)


你可以这样做

Observable.fromIterable(friendConnections)
        .flatMap { Observable.just(Friend(it.id, it.humanId, repository.getHumanById(it.humanId).blockingGet())) }
        .toList()
        .subscribe {it --> /*Your Operation*/

这个解决方案适合你吗

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()))
private fun getHumanById(id:Long):Single=Single.just(Human(id,id.toString()))

您得到了什么结果?为什么在
repository.getHumanById(friendConnection.humanId)?.map中使用安全调用?如果您有
getHumanById(id:Long):单个签名,为什么要使用Rx?您可以使用kotlin操作符本身来实现这一点。您的
repository.getHumanById
是否正在调用API?不,这只是一个本地数据库调用。您确定
fun getHumanById(id:Long)
返回
Single
而不是
Single?
(可空类型)?因为在表达式
repository.getHumanById(friendConnection.humanId)?.map{…}
问号表示可空类型。True。如果
repository.getHumanById
进行API调用,那么它应该是
flatMap
。(根据假设更新了答案)没有假设,不管方法在做什么。它返回单个,因此您需要FlatMap。这对我不起作用。我在friendConnection列表中有50个条目,但只有前两次被称为flatMapSingle,为什么?@vihkat,请回答我在问题下的评论。也许问题就在这里。而且,如果我们能知道它为什么不起作用,那就太酷了。编译时错误、运行时错误、意外结果?它可以与模拟一起工作。但是不能使用我的单曲,但我确信它不会返回null,因为我在一个修复ID中烧坏了,这个ID可以正常工作。你完全确定
getHumanById
会准确返回
Single
?它不是
单一的
单一的
,甚至不是
单一的
?是的。我敢肯定
private fun getHumanById(id: Long): Single<Human> = Single.just(Human(id, id.toString()))