压缩两个可观察对象 - 先用另一个对象的输入过滤一个观察对象。
问题描述:
我正在尝试使用rxJava和retrofit来组合两个RESTful调用,并返回一个单一的组合对象,然后我可以使用它来更新一个android应用程序。我认为我应该使用zip,但是我的问题是我需要根据第一个可观察值过滤第二个可观察值。压缩两个可观察对象 - 先用另一个对象的输入过滤一个观察对象。
我的两个宁静的调用看起来像这样
- 是一个上市的呼叫,并自动过滤掉的对象 - 只返回配置的设备。
- 是状态调用,不过滤任何东西。
于是呼#1将返回一组对象是这样的:
- 设备:ID = 2,名称= “酒吧”
- 设备:ID = 3,名称= “巴兹”
然而,呼叫#2将返回所有对象,即使没有配置它们,看起来像这样:
- 设备:ID = 1,状态= 0
- 设备:ID = 2,状态= 75
- 装置:ID = 3,状态= 100
我所要做的是返回一个组合对象,它从#1呼叫中获取设备,并使用来自呼叫#2的状态来装饰它们。这两个调用将始终按ID排序顺序返回对象。
将合并的输出应该看起来像这样的对象的列表:
- 设备:ID = 2,名称= “酒吧”,状态= 75
- 装置:ID = 3,名称=”巴兹”,状态= 100
答
让我试试这个,我还在学习的Rx所以借此与一粒盐:
Observable.zip(api.firstCall(), api.secondCall(),
(firstResult, secondResult)
-> { Observable.from(secondResult).filter({ firstResult.containsId(it) }).toList(); })
.subscribe(callback);
基本上这是我认为应该发生的事情:我们在两次调用执行后都得到结果。我假设我们得到一个列表作为secondResult,所以我们使用.from()
将列表分成观察值。然后我们将它们过滤掉(检查.containsId()必须由您执行)。完成之后,我们将结果转换回列表。