如何使用Single与Observable

时间:2018-11-04 18:42:27

标签: java-8 observable rx-java2

我创建了一个示例,以查看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 :(得分:2)

Single用于发射一个对象,而Observable用于发射零个或多个对象。对象可以是字符串,列表或您定义的任何组合类。他们各自的JavaDocs应该对它们进行一些概述:

在您的学习示例中,如果要通过Single使用该序列,则必须将其转换回SingleObserver。您有很多年龄段的号码,因此您只需应用toList就能获得全部年龄段

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