如何使用Single vs Observables



我创建了一个示例来查看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")));
}
}

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

  • http://reactivex.io/RxJava/2.x/javadoc/io/reactivex/Single.html
  • http://reactivex.io/RxJava/2.x/javadoc/io/reactivex/Observable.html

在您的学习示例中,如果您想通过SingleObserver消耗序列,则必须将其转换回Single。你有很多年龄号码,所以你只需应用toList就可以获得所有的:

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

最新更新