【问题标题】:RXJava2 How to combine 2 observables in oneRXJava2 如何将 2 个 observables 合二为一
【发布时间】:2019-09-11 00:41:27
【问题描述】:

我有两个返回对象的 api:

public class Enemy{

private String name;
private int id;
private EnemyCharacteristics enemyCharacteristics;

+getter 和 setter

public class EnemyCharacteristics {

private ArrayList<Abilities> abilities;
private ArrayList<Stats> stats;

+getter 和 setter

我有改造界面:

public interface ApiService{
@GET("enemy")
Observable<EnemyResult> getEnemyResult(@Query("limit") int limit, @Query("offset") int offset);

@GET("enemy/{name}")
Observable<EnemyCharacteristics> getEnemyCharacteristics(@Path("name") String name);

我发送请求 getEnemyResult(),它返回:

public class EnemyResult{

private ArrayList<Enemy> results;

public ArrayList<Enemy> getResults() {
    return results;
}

public void setResults(ArrayList<Enemy> results) {
    this.results = results;
}

}

接下来,我需要为每个 Enemy 请求发送 getEnemyCharacteristics() 并使用结果调用 Enemy.setEnemyCharacteristics()。

我应该如何将这两个请求与 RXJava2 结合起来,以将 EnemyCharacteristics 作为 Enemy 的一部分返回 Enemy 对象?

【问题讨论】:

  • 因为 getEnemyCharacteristics 返回多个 EnemyCharacteristics (Observable&lt;EnemyCharacteristics&gt;),应该使用哪一个来调用 Enemy.setEnemyCharacteristics()?只是第一个?
  • 第二个 api 请求有参数 - Enemy.name。 Api 只为这个名称的 Enemy 返回一个 EnemyCharacteristics:apiService.getEnemyCharacteristics(name);

标签: java android retrofit rx-java rx-java2


【解决方案1】:
getEnemyResult(..)
    .flatMapIterable(result -> result.getResults())
    .flatMap(enemy -> 
        getEnemyCharacteristics(enemy.name)
            .firstElement()
            .flatMap(characteristics -> {
                enemy.setEnemyCharacteristics(characteristics);
                return Maybe.just(enemy);
            })
    )

【讨论】:

    猜你喜欢
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2020-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    相关资源
    最近更新 更多