📜  RxJava-创建可观测对象(1)

📅  最后修改于: 2023-12-03 15:19:53.699000             🧑  作者: Mango

RxJava-创建可观测对象
什么是RxJava?

RxJava是ReactiveX项目的Java版本实现,它是一个用于基于事件流和数据流的异步编程的库。RxJava采用观察者模式,通过使用可观察对象和观察者来实现异步调用。RxJava的主要目的是使异步编程变得更加简单、轻松和直观。

什么是可观测对象?

可观察对象是一种在RxJava中非常重要的概念,它是可以发射一系列事件的对象。这些事件可能是任何类型的,包括通知、错误或数据,而可观测对象能够将这些事件发送给它的观察者。

创建可观测对象

在RxJava中,有多种方法来创建可观测对象。下面是其中一些常见的方式:

just

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

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

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

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方法可以在每次订阅时创建一个新的可观测对象。因此,如果你希望在订阅时动态地创建一个可观测对象,你就可以使用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时,你可能需要根据自己的需求选择最合适的方法。