【发布时间】:2019-12-17 20:48:26
【问题描述】:
我正在使用 RxJava 从 JSONplaceholder api 获取帖子列表。
https://jsonplaceholder.typicode.com/posts
我只想从列表中取出前 10 名并保存在数据库中。
我知道我需要使用 take 运算符,但不知道如何将它与 concatMap 一起使用。
这是我已经拥有的。
private fun loadPosts(){
subscription = Observable.fromCallable { postDao.all }
.concatMap { dbPostList ->
postApi.getPosts().concatMap { apiPostList ->
//HERE i ONLY WANT TO TAKE 10 ITEMS AND SAVE IT (HOW CAN I USE TAKE OPERATOR HERE)
postDao.insertAll(*apiPostList.toTypedArray())
Observable.just(apiPostList)
}
}
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe { onRetrievePostListStart() }
.doOnTerminate { onRetrievePostListFinish() }
.subscribe(
{ result -> onRetrievePostListSuccess(result) },
{ onRetrievePostListError() }
)
}
我尝试了以下代码,但它没有按预期工作。
postApi.getPosts()
.take(10) // DOES NOT WORK
.concatMap { apiPostList ->
postDao.insertAll(*apiPostList.toTypedArray())
Observable.just(apiPostList)
}
【问题讨论】:
-
我认为 takewhile 运算符就是为此而生的
标签: android kotlin rx-java rx-android flatmap