gpt4 book ai didi

android - 为什么 RxJava 中的 take(5) 运算符返回所有对象

转载 作者:行者123 更新时间:2023-11-29 16:39:48 25 4
gpt4 key购买 nike

我对 rxjava 中的 take(5) 运算符有疑问。我不明白为什么subscribe {ui.showLikes(it)} 始终返回数据库中的所有对象。运算符 take() 不起作用?我做错了什么?感谢您的帮助。

fun downloadLikes(userId: String, skillId: Int) {
val subscription = apiService.rxListPluses()
.flatMap {
localDataSource.savePluses(it)
apiService.getUserDetails()
}
.flatMap {
localDataSource.rxGetLikeItems(userId, skillId)
.take(5)
}
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
ui.showLikes(it)
}

bindToLifecycle(subscription)
}

public Observable<ArrayList<LikeItem>> rxGetLikeItems(String userId, int skillId) {
return Observable.fromCallable(() -> getLikeItems(userId, skillId));
}

最佳答案

在评论中点赞,rxGetLikeItems发出 ArrayList<LikeItem> , 不是 LikeItem .

所以 rxGetLikeItems(your, mum).take(5)意思是“取前五个 List<LikeItem> 发出”

为了更清楚地使用另一个示例,假设函数:

fun getList() : Observable<List<Int>> {
return Observable.just(listOf(1,2,3,4,5,6,7,8,9,10))
}

如果我们调用 take(5)对此:

getList()
.take(5)
.test()
.assertResult(
listOf(1,2,3,4,5,6,7,8,9,10)
)

我们得到第一个列表作为发射。

您可能想要的是类似 flatMapIterable 的东西:

getList()
.flatMapIterable { x -> x }
.take(5)
.test()
.assertResult(
1,2,3,4,5
)

或者如果您需要发出一个列表:

getList()
.flatMapIterable { x -> x }
.take(5)
.toList()
.test()
.assertResult(
listOf(1,2,3,4,5)
)

另请注意,最好返回 List而不是 ArrayList如果可能的话,因为 Liskov 替换原则。

关于android - 为什么 RxJava 中的 take(5) 运算符返回所有对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51197994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com