gpt4 book ai didi

android - 在 Kotlin 中使用 RxJava 进行数据转换

转载 作者:行者123 更新时间:2023-11-30 00:15:04 25 4
gpt4 key购买 nike

我正在使用 Kotlin,我有一个 Observable<List<FlickPhoto>>模型。每个FlickrPhoto包含一个列表,每个 Photos模型包含 List<Photo> .

我想转换一个 List<FlickrPhoto>List<PhotoEntity> ,这基本上是另一个数据较少的模型,并将其包装到 Observable 中(为了最终得到 Observable<List<PhotoEntity>> )。

我怎样才能以最好的 RxJava 方式做到这一点?我创建了一个 PhotoEntityMapper使用以下方法上课,我确定可以正确地用于此目的: override fun transform(photoCollection: List<Photo>): List<PhotoEntity>

提前致谢!

最佳答案

您评论中的解决方案确实有效:

// original
remoteDataSource
.getPhotos(photoTag)
.flatMap({ t: FlickrPhoto ->
Observable
.just(serviceMapper.transform(t.photos.photo)) // <-- not lazy
})

在这里你有稍微不同的选择:

// v1
remoteDataSource
.getPhotos(photoTag)
.flatMap {
Observable
.just(it.photos.photo)
.map { serviceMapper.transform(it) } // <-- lazy transformation
}

// v2
remoteDataSource
.getPhotos(photoTag)
.flatMapIterable { it }
.map { serviceMapper.transform(it.photos.photo) }

没有比其他选项更好的选项了。通常我会选择 v2,因为它更短。

但是,我不知道 serviceMapper 做了什么。例如,如果它涉及网络并且我想在另一个 Scheduler 中执行它,那么 v1 就很好,因为您可以在另一个线程中订阅转换(您不能在原始版本中做,因为转换是预先计算的)。示例:

// v1 - with scheduler
remoteDataSource
.getPhotos(photoTag)
.flatMap {
Observable
.just(it.photos.photo)
.map { serviceMapper.transform(it) } // <-- lazy transformation
.subscribeOn(Schedulers.io()) // <-- schedule on io()
}

关于android - 在 Kotlin 中使用 RxJava 进行数据转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47420714/

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