使用 RxJava 将列表插入房间数据库
Insert a List Into Room Database Using RxJava
我有一个要映射的项目列表,然后将其插入房间 table:
房间
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(vararg projectLocal: ProjectLocal): Completable
第一种保存数据的方法:
Observable.fromIterable(remoteProjects)
.map { project ->
...
mProjectMapper.mapRemoteToLocal(project)
}
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe {
mProjectRepository.saveProject(it)
}
如您所见,我是 observing on -> main thread
和 subscribing on -> io
第二种保存数据的方法:
remoteProjects.forEach { remote ->
...
val project = mProjectMapper.mapRemoteToLocal(remote)
mProjectRepository.saveProject(project)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe()
}
哪个更有意义?有没有更好的方法使用 RxJava 将所有这些数据保存在 Room 数据库中?
我想这就是@Mwasz 的意思:
Observable.fromIterable(remoteProjects)
.map { project ->
mProjectMapper.mapRemoteToLocal(project)
}
.toList()
.flatMapCompletable {
mProjectRepository.saveProject(it)
.subscribeOn(Schedulers.io())
}
.subscribe()
您也可以使用 reduce
或 collect
代替 toList
,但 toList()
是最简单的。
我有一个要映射的项目列表,然后将其插入房间 table:
房间
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(vararg projectLocal: ProjectLocal): Completable
第一种保存数据的方法:
Observable.fromIterable(remoteProjects)
.map { project ->
...
mProjectMapper.mapRemoteToLocal(project)
}
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe {
mProjectRepository.saveProject(it)
}
如您所见,我是 observing on -> main thread
和 subscribing on -> io
第二种保存数据的方法:
remoteProjects.forEach { remote ->
...
val project = mProjectMapper.mapRemoteToLocal(remote)
mProjectRepository.saveProject(project)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe()
}
哪个更有意义?有没有更好的方法使用 RxJava 将所有这些数据保存在 Room 数据库中?
我想这就是@Mwasz 的意思:
Observable.fromIterable(remoteProjects)
.map { project ->
mProjectMapper.mapRemoteToLocal(project)
}
.toList()
.flatMapCompletable {
mProjectRepository.saveProject(it)
.subscribeOn(Schedulers.io())
}
.subscribe()
您也可以使用 reduce
或 collect
代替 toList
,但 toList()
是最简单的。