2017-02-14 7 views
-1

В настоящее время я изучаю самые основы RxJava/RxAndroid и попытался создать очень базовое тестовое приложение для переоснащения.Как вы перебираете список в пределах наблюдаемого в RxJava?

Я использую 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; 
    } 
} 

Как можно отобразить функцию (для примера, печать getName() каждого Agency в списке), когда Объект Observable - это класс, содержащий список. То есть Observable<AgencyResponse>

Реальный мир и, надеюсь, яркий пример этого ниже:

public class MainActivity extends BaseActivity { 

private TextView textView; // Code to populate this omitted 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // Create Retrofit service 
    LaunchLibService service = ServiceFactory.createRetrofitService(LaunchLibService.class, LaunchLibService.SERVICE_ENDPOINT); 

    //getAgencyList returns Observable<AgencyResponse> 
    service.getAgencyList() 
    .subscribeOn(Schedulers.newThread()) 
    .observeOn(AndroidSchedulers.mainThread()) 
    .map(AgencyResponse::getAgencies) // Gets the List<Agency> but how do I iterate over each object and print? 
    .subscribe(); 
} 
} 

Любая помощь будет здорово, спасибо.

+1

См http://stackoverflow.com/a/42215321/61158 – akarnokd

+0

Обеспечить какую версию RxJava. –

+0

Это используется RxJava 1.2.6 - я обновлю вопрос –

ответ

4

Это решение было решено с использованием следующего: у меня отсутствовал 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"));