RxJava操作符实践:1_创建操作之4_from

一、描述

将其它种类的对象和数据类型转换为Observable。

当你使用Observable时,如果你要处理的数据都可以转换成展现为Observables,而不是需要混合使用Observables和其它类型的数据,会非常方便。这让你在数据流的整个生命周期中,可以使用一组统一的操作符来管理它们。

例如,Iterable可以看成是同步的Observable;Future,可以看成是总是只发射单个数据的Observable。通过显式地将那些数据转换为Observables,你可以像使用Observable一样与它们交互。

因此,大部分ReactiveX实现都提供了将语言特定的对象和数据结构转换为Observables的方法。

在RxJava中,from操作符可以转换Future、Iterable和数组。对于Iterable和数组,产生的Observable会发射Iterable或数组的每一项数据。

对于Future,它会发射Future.get()方法返回的单个数据。from方法有一个可接受两个可选参数的版本,分别指定超时时长和时间单位。如果过了指定的时长Future还没有返回一个值,这个Observable会发射错误通知并终止。

from默认不在任何特定的调度器上执行。然而你可以将Scheduler作为可选的第二个参数传递给Observable,它会在那个调度器上管理这个Future。

二、示意图

from

三、示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Integer[] items = { 0, 1, 2, 3, 4, 5 };

Observable.from(items)
.subscribe(new Subscriber<Object>() {
@Override
public void onCompleted() {
System.out.println("onCompleted.");
}

@Override
public void onError(Throwable e) {
System.out.println("onError: " + e.getMessage());
}

@Override
public void onNext(Object o) {
System.out.println("onNext: " + o);
}
});

四、运行结果

1
2
3
4
5
6
7
onNext: 0
onNext: 1
onNext: 2
onNext: 3
onNext: 4
onNext: 5
onCompleted.

项目代码已上传到Github:https://github.com/SherlockShi/RxJavaBestPractise

五、更多

from操作符共有以下几个变体:

1
2
3
4
5
from(array)
from(Iterable)
from(Future)
from(Future,Scheduler)
from(Future,timout,timeUnit)

六、参考资料

ReactiveX官方文档

ReactiveX文档中文翻译

PS:欢迎关注 SherlockShi 个人博客

感谢你的支持,让我继续努力分享有用的技术和知识点!