2014-12-07 86 views
2

我正在尝试使用rxJava和retrofit来组合两个RESTful调用,并返回一个单一的组合对象,然后我可以使用它来更新一个android应用程序。我认为我应该使用zip,但是我的问题是我需要根据第一个可观察值过滤第二个可观察值。压缩两个可观察对象 - 先用另一个对象的输入过滤一个观察对象。

我的两个宁静的调用看起来像这样

  1. 是一个上市的呼叫,并自动过滤掉的对象 - 只返回配置的设备。
  2. 是状态调用,不过滤任何东西。

于是呼#1将返回一组对象是这样的:

  • 设备:ID = 2,名称= “酒吧”
  • 设备:ID = 3,名称= “巴兹”

然而,呼叫#2将返回所有对象,即使没有配置它们,看起来像这样:

  • 设备:ID = 1,状态= 0
  • 设备:ID = 2,状态= 75
  • 装置:ID = 3,状态= 100

我所要做的是返回一个组合对象,它从#1呼叫中获取设备,并使用来自呼叫#2的状态来装饰它们。这两个调用将始终按ID排序顺序返回对象。

将合并的输出应该看起来像这样的对象的列表:

  • 设备:ID = 2,名称= “酒吧”,状态= 75
  • 装置:ID = 3,名称=”巴兹”,状态= 100

回答

0

让我试试这个,我还在学习的Rx所以借此与一粒盐:

Observable.zip(api.firstCall(), api.secondCall(), 
(firstResult, secondResult) 
-> { Observable.from(secondResult).filter({ firstResult.containsId(it) }).toList(); }) 
.subscribe(callback); 

基本上这是我认为应该发生的事情:我们在两次调用执行后都得到结果。我假设我们得到一个列表作为secondResult,所以我们使用.from()将列表分成观察值。然后我们将它们过滤掉(检查.containsId()必须由您执行)。完成之后,我们将结果转换回列表。

相关问题