RxJava3 创建操作符整理

本文详细介绍了RxJava3中的创建操作符,包括create、just、fromArray、fromIterable和defer等,通过实例展示了如何使用这些操作符来创建被观察者,并解释了响应式编程的基本步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近这三四个项目中都用到了RxJava,使用频率之高,觉着有必要进行整理,方便自己巩固记忆,也便于他人学习查找;

本文就RxJava3的创建操作符进行记录,整理如下图:

 RxJava 使用步骤 :

数据源产生数据并发射给订阅了这个数据的观察者(响应式编程)。

所以主要分为三步:

第一步:创建被观察者(数据源)并生产数据

第二步:创建观察者 

第三步:订阅(关系绑定)

1、create


 

点击一个按钮时,建立订阅关系

输出如下:

2、just

点击一个按钮时,建立订阅关系

输出如下:

3、formArray

点击一个按钮时,建立订阅关系

输出如下:

4、formIterable

点击一个按钮时,建立订阅关系

输出如下:

5、defer

举了这么几个简单的例子,我把剩下的代码都复制在下面吧:

 

 

public class MainActivity extends AppCompatActivity {
    private List<Integer> list = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        list.add(6);
        list.add(7);
        list.add(8);
        list.add(9);
        list.add(10);
        list.add(11);
    }

    public void testOnClick(View view) {
        //3、订阅,此时触发1步中subscribe方法的执行
        observableByFromWithLambda.subscribe(observer);
    }

    //创建操作符  range,rangeLong
    //连续发送一个序列,可指定范围
    //序列可为Long类型
//    Observable<Long> observableByFromWithLambda = Observable.rangeLong(1,20);

    /**
     * start:  开始数值
     * count: 输出值的个数
     * initialDelay: 延迟多少秒执行
     * period: 间隔多久执行一次
     * TimeUnit:  单位设置,NANOSECONDS(纳秒),MICROSECONDS(微秒),MILLISECONDS(毫秒),SECONDS(秒),MINUTES(分钟),HOURS(小时),DAYS(天)
     */
    //创建操作符intervalRange,每隔指定时间发送指定数量
    // Observable<Long> observableByFromWithLambda = Observable.intervalRange(0,12,2,2,TimeUnit.SECONDS);

    //创建操作符interval,每隔指定时间发送
//    Observable<Long> observableByFromWithLambda = Observable.interval(3,TimeUnit.SECONDS);

    //创建操作符timer,延迟指定时间后发送
//    Observable<Long> observableByFromWithLambda = Observable.timer(3, TimeUnit.SECONDS);

    //创建操作符 defer,直到被订阅后才发送
    Observable<Integer> observableByFromWithLambda = Observable.defer(() -> Observable.just(5));

    //创建操作符 error ,仅发送Error事件
//    Observable<Integer> observableByFromWithLambda = Observable.error(new Throwable());

    //创建操作符 empty,仅发送仅发送Complete事件
//    Observable<Integer> observableByFromWithLambda = Observable.empty();

    //创建操作符 never,不发送任何事件
//    Observable<Integer> observableByFromWithLambda = Observable.never();


    //1、创建操作符fromIterable,发送传入的list数据
//    Observable<Integer> observableByFromWithLambda = Observable.fromIterable(list);


    //1、创建操作符formArray(),发送传入的数组数据
//    Integer[] items = {0, 1, 2, 3, 4};
//    Observable<Integer> observableByFromWithLambda = Observable.fromArray(items);


    //1、创建操作符 just()使用(直接发送传入的值)
//    Observable<Integer> observableByFromWithLambda = Observable.just(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);


    //1、创建被观察者(create使用,   最基本的创建方式)
//    Observable<Integer> observableByFromWithLambda = Observable.create((emitter -> {
//        emitter.onNext(1);
//        emitter.onNext(2);
//        emitter.onNext(3);
//        emitter.onNext(4);
//        emitter.onComplete();
//    }));


    //2.创建观察者/订阅者
    Observer<Integer> observer = new Observer<Integer>() {
        @Override
        public void onSubscribe(Disposable d) {
            Log.d("MainActivity", "订阅时被调用");
        }
        @Override
        public void onNext(Integer o) {
            Log.d("MainActivity", "发送数据时被多次调用" + String.valueOf(o));
        }
        @Override
        public void onError(Throwable e) {
            Log.d("MainActivity", "出错时被调用" + e.toString());
        }
        @Override
        public void onComplete() {
            Log.d("MainActivity", "完成时被调用");
        }
    };


//    Observer<Long> observer = new Observer<Long>() {
//
//
//        @Override
//        public void onSubscribe(@NonNull Disposable d) {
//            Log.d("MainActivity", "onSubscribe(Disposable d) called!");
//        }
//
//        @Override
//        public void onNext(@NonNull Long aLong) {
//            Log.d("MainActivity", "nNext(Integer o) called!" + aLong);
//        }
//
//        @Override
//        public void onError(@NonNull Throwable e) {
//            Log.d("MainActivity", "onError(Throwable e) called!" + e.toString());
//        }
//
//        @Override
//        public void onComplete() {
//            Log.d("MainActivity", "onComplete called!");
//        }
//    };


}

后续,我再整理别的操作符;今天就这样;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值