Как использовать Single vs Observables - PullRequest
0 голосов
/ 04 ноября 2018

Я создал пример, чтобы увидеть разницу между Single и Observable. приведенный ниже пример не работает. Также я не вижу никакой разницы между Наблюдаемые и единичные.

Как работают приведенные ниже примеры?

Код:

public static void main(String[] args) {

    Single<List<List<Person>>> observables = Single.just(Main.getPersons());
    observables
    .flatMap(ll->Observable.fromIterable(ll)
            .concatMap(p->Observable.fromIterable(p))
                    .map(s->s.getAge()))
    .observeOn(Schedulers.io())
    .subscribe(new SingleObserver() {

        @Override
        public void onError(Throwable arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onSubscribe(Disposable arg0) {
            // TODO Auto-generated method stub
            System.out.println("onSubscribe: " + arg0);
        }

        @Override
        public void onSuccess(Object arg0) {
            // TODO Auto-generated method stub
            System.out.println("onSuccess: " + arg0);
        }
    });

private static <T> Observable<T> toObservable(T s) {
    return Observable.just(s);
}
private static List<List<Person>> getPersons() {
    return Arrays.asList(
            Arrays.asList(new Person("Sanna1", 59, "EGY"), new Person(null, 59, "EGY"), new Person("Sanna3", 59, null)),
            Arrays.asList(new Person("Mohamed1", 59, "EGY"), new Person(null, 59, "EGY")),
            Arrays.asList(new Person("Ahmed1", 44, "QTR"), new Person("Ahmed2", 44, "QTR"), new Person(null, null, "QTR")),
                    Arrays.asList(new Person("Fatma", 29, "KSA")),
                    Arrays.asList(new Person("Lobna", 24, "EGY")));
}
}

1 Ответ

0 голосов
/ 04 ноября 2018

Single для испускания одного объекта, а Observable для испускания нуля или нескольких объектов. Объект может быть строкой, списком или любым составным классом, который вы определяете. Их соответствующие JavaDocs должны дать некоторое представление о них:

В вашем примере обучения вы должны превратить последовательность обратно в Single, если хотите использовать ее через SingleObserver. У вас много возрастных чисел, поэтому вы можете просто применить toList, чтобы получить их все:

observables
.flatMap(ll -> 
     Observable.fromIterable(ll)
     .concatMap(p -> Observable.fromIterable(p))
     .map(s -> s.getAge())
     .toList()   // <--------------------------------------------------
)
...