使用RxJava将列表插入会议室数据库中

问题描述 投票:1回答:1

我有一个要映射的项目列表,然后插入到房间表中:

房间

@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(vararg projectLocal: ProjectLocal): Completable

FIRST保存数据的方法:

Observable.fromIterable(remoteProjects)
            .map { project ->
                ...
                mProjectMapper.mapRemoteToLocal(project)
            }
            .observeOn(AndroidSchedulers.mainThread())
            .subscribeOn(Schedulers.io())
            .subscribe {
                mProjectRepository.saveProject(it)
            }

您可能会看到我是observing on -> main threadsubscribing on -> io

[第二保存数据的方法:

remoteProjects.forEach { remote ->
                ...
                val project = mProjectMapper.mapRemoteToLocal(remote)
                mProjectRepository.saveProject(project)
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribeOn(Schedulers.io())
                    .subscribe()
            }

哪个更有意义?是否有更好的方法使用RxJava将所有这些数据保存在Room数据库中?

android kotlin android-room rx-java2
1个回答
0
投票
我认为这是@Mwasz的意思:

Observable.fromIterable(remoteProjects) .map { project -> mProjectMapper.mapRemoteToLocal(project) } .toList() .flatMapCompletable { mProjectRepository.saveProject(it) .subscribeOn(Schedulers.io()) } .subscribe()

您也可以使用reducecollect代替toList,但toList()是最简单的。    
© www.soinside.com 2019 - 2024. All rights reserved.