kotlin - 如何结合两个可流动并仅获得相同的排放值?
问题描述
val flowable01 = Flowable.fromArray(listOf(
Value(epoch = 1,string ="apple"),
Value(epoch = 2,string ="apple"),
Value(epoch = 3,string ="apple"),
Value(epoch = 4,string ="apple"),
Value(epoch = 5,string ="apple"),
Value(epoch = 6,string ="apple"),
Value(epoch = 7,string ="apple"),
Value(epoch = 8,string ="apple"),
Value(epoch = 9,string ="apple"),
Value(epoch = 10,string ="apple"),
))
val flowable02 = Flowable.fromArray(listOf(
Value(epoch = 2,string ="orange"),
Value(epoch = 3,string ="orange"),
Value(epoch = 5,string ="orange"),
Value(epoch = 8,string ="orange"),
Value(epoch = 10,string ="orange"),
))
flowable01.filter { it.epoch == flowable02.emission.epoch }
.map { Value(it.epoch, "juice") }
如何组合两个可流动的并仅从排放中过滤出相同的值并将其映射到另一个数据类?也许使用 combineLatest/zip
//Result:
Value(epoch = 2,string ="juice")
Value(epoch = 3,string ="juice")
Value(epoch = 5,string ="juice")
Value(epoch = 8,string ="juice")
Value(epoch = 10,string ="juice")
解决方案
您可以使用flatMap
:
flowable01.flatMap { first ->
flowable02.filter { second -> first.epoch == second.epoch }
.map { second -> Value(second.epoch, "Juice") }
}
如果 flowable02 是一个外部数据源,您可能不想每次都重新查询它,以便将其预先缓存:
flowable02cache = flowable02.cache()
flowable01.flatMap { first ->
flowable02cache.filter { second -> first.epoch == second.epoch }
.map { second -> Value(second.epoch, "Juice") }
}
如果您想利用每个源中的排序,则在合并步骤中会更加复杂:
Single.zip(flowable01.toList(), flowable02.toList()) { first, second ->
val result = ArrayList<Value>()
var i = 0;
var j = 0;
while (i < first.length && j < second.length) {
if (first[i].epoch == second[j].epoch) {
result.add(Value(first[i].epoch, "Juice"))
i++;
j++;
}
if (first[i].epoch < second[j].epoch) {
i++;
}
if (first[i].epoch > second[j].epoch) {
j++;
}
}
result;
}
推荐阅读
- azure - Azure B2C 用户流 v2.0(注册和登录) - 无法找到 Userinfo 端点
- json - 在 React Native 中重新映射 Firebase JSON 数据
- authentication - Azure ADB2C 多 Web API 身份验证
- swift - SwiftUI:停止永远重复的动画
- spring-webflux - 如何在 spring-webflux 中使用请求和会话范围(截至最新版本)
- java - 如何在 Android Studio 中压缩 Kotlin 项目
- python - def create 方法中的 Django Rest Framework 问题..在试用结束字段中面临空值
- vb.net - 如何在 vb.net 中将对象转换为 json?
- python - Python 下载包含 JS 的网站 HTML
- javascript - 如何在特定坐标上的图像上绘制 svg 或画布