我创建了一个示例,以查看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")));
}
}
答案 0 :(得分:2)
Single
用于发射一个对象,而Observable
用于发射零个或多个对象。对象可以是字符串,列表或您定义的任何组合类。他们各自的JavaDocs应该对它们进行一些概述:
在您的学习示例中,如果要通过Single
使用该序列,则必须将其转换回SingleObserver
。您有很多年龄段的号码,因此您只需应用toList
就能获得全部年龄段
observables
.flatMap(ll ->
Observable.fromIterable(ll)
.concatMap(p -> Observable.fromIterable(p))
.map(s -> s.getAge())
.toList() // <--------------------------------------------------
)