📅  最后修改于: 2023-12-03 15:19:53.699000             🧑  作者: Mango
RxJava是ReactiveX项目的Java版本实现,它是一个用于基于事件流和数据流的异步编程的库。RxJava采用观察者模式,通过使用可观察对象和观察者来实现异步调用。RxJava的主要目的是使异步编程变得更加简单、轻松和直观。
可观察对象是一种在RxJava中非常重要的概念,它是可以发射一系列事件的对象。这些事件可能是任何类型的,包括通知、错误或数据,而可观测对象能够将这些事件发送给它的观察者。
在RxJava中,有多种方法来创建可观测对象。下面是其中一些常见的方式:
just方法是一种最简单的创建可观测对象的方法,它简单地将一个或多个对象转换成可观测对象并发射出去。
Observable.just("Hello", "RxJava").subscribe(new Observer<String>{
@Override
public void onNext(String s) {
System.out.println(s);
}
@Override
public void onCompleted() {
System.out.println("Completed");
}
@Override
public void onError(Throwable throwable) {
throwable.printStackTrace();
}
})
输出结果如下:
Hello
RxJava
Completed
from方法可以将一个Iterable、一个Future或者一个数组转换成一个可观测对象,并发射出去。Iterable.clone()方法将所有的元素添加到一个列表中,并返回该列表。
List<String> list = new ArrayList<>();
list.add("Hello");
list.add("RxJava");
Observable.from(list).subscribe(new Observer<String>{
@Override
public void onNext(String s) {
System.out.println(s);
}
@Override
public void onCompleted() {
System.out.println("Completed");
}
@Override
public void onError(Throwable throwable) {
throwable.printStackTrace();
}
})
输出结果如下:
Hello
RxJava
Completed
range方法可以创建一个从指定起始值开始,持续一段时间的可观测对象。下面是从1开始输出5个数的示例代码:
Observable.range(1, 5).subscribe(new Observer<Integer>{
@Override
public void onNext(Integer integer) {
System.out.println(integer);
}
@Override
public void onCompleted() {
System.out.println("Completed");
}
@Override
public void onError(Throwable throwable) {
throwable.printStackTrace();
}
})
输出结果如下:
1
2
3
4
5
Completed
interval方法可以根据指定的时间间隔持续地发射一个无限递增的整数序列。
Observable.interval(1000, TimeUnit.MILLISECONDS).subscribe(new Observer<Long>{
@Override
public void onNext(Long aLong) {
System.out.println(aLong);
}
@Override
public void onCompleted() {
System.out.println("Completed");
}
@Override
public void onError(Throwable throwable) {
throwable.printStackTrace();
}
})
输出结果将会持续打印出一个无限递增的整数序列。
defer方法可以在每次订阅时创建一个新的可观测对象。因此,如果你希望在订阅时动态地创建一个可观测对象,你就可以使用defer方法。
Observable<LocalDateTime> observable = Observable.defer(() -> {
return Observable.just(LocalDateTime.now());
});
observable.subscribe(new Observer<LocalDateTime>{
@Override
public void onNext(LocalDateTime localDateTime) {
System.out.println(localDateTime);
}
@Override
public void onCompleted() {
System.out.println("Completed");
}
@Override
public void onError(Throwable throwable) {
throwable.printStackTrace();
}
})
输出结果将会不断地打印出当前的时间。
以上介绍了几种创建可观测对象的方法,并且每种方法都附带了一个示例。如果你刚刚开始了解RxJava,那么这些示例很有可能是一些入门参考。当然,在RxJava中还有很多其他的创建可观测对象的方法,并且每种方法都有其适用的场景。因此,当你开始实际使用RxJava时,你可能需要根据自己的需求选择最合适的方法。