如何在RxJava中的Observable中迭代列表?

时间:2017-02-14 16:16:47

标签: android rx-java rx-android

我目前正在学习RxJava / RxAndroid的基础知识,并尝试创建一个非常基本的Retrofit测试应用程序。

我在这个例子中使用RxJava 1.2.6。

但是,我还没有找到任何关于如何在Observable对象中 列表的对象上执行函数的明确示例。

E.g。如果我有以下POJO

public class AgencyResponse {

    private List<Agency> agencies;
    private int total;
    private int count;
    private int offset;

    public List<Agency> getAgencies() {
        return agencies;
    }

    public int getTotal() {
        return total;
    }

    public int getCount() {
        return count;
    }

    public int getOffset() {
        return offset;
    }
}

以及

public class Agency {

    private int id;
    private String name;
    private String abbrev;

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getAbbrev() {
        return abbrev;
    }
}

当Observable对象是包含列表的类时,如何映射函数(例如,在List中打印每个getName()的{​​{1}})。即Agency

现实世界,希望更清楚的例子如下:

Observable<AgencyResponse>

任何帮助都会很棒,谢谢。

1 个答案:

答案 0 :(得分:7)

使用以下方法解决了这个问题 - 我错过了一个可以访问flatMapIterable对象的Agency

LaunchLibService service = ServiceFactory.createRetrofitService(LaunchLibService.class, LaunchLibService.SERVICE_ENDPOINT);
        service.getAgencyList()
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .map(AgencyResponse::getAgencies) // Gets the List<Agency> but how do I iterate over each object
                .flatMapIterable(agencyResponse -> agencyResponse)
                .map(Agency::getName)
                .subscribe(s -> textView.append(s + "\n"));