2014-12-07 110 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()必須由您執行)。完成之後,我們將結果轉換回列表。