RxJava初见之创建操作

RXJava
RXJava好处

流行框架,流处理,逻辑清晰,网络处理方便,不再使用Handler,异步操作,简洁,哪怕是逻辑上面复杂,代码程度上面也能够做到简洁,与Retrofit2.0完美结合,多操作符。

RXJava相关依赖
 compile 'io.reactivex:rxjava:1.1.6'
 compile 'io.reactivex:rxandroid:1.2.1'
RXJava的使用
基本概念

RxJava基于的是观察者模式,类似订阅-发布,也类似Android的View的一些Listener监听
主要是有下面三个概念
1. Observable 被观察者
2. Observer 观察者,是一个接口
3. Subscriber 观察者,继承自Observer,一般使用这个
观察者与被观察之间是通过subscribe()方法联系起来。与一般的逻辑相反的是,这里是Observable.subscribe(Observer/Subscriber)

简单使用
  1. 建Observable对象
Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() {
            @Override
            public void call(Subscriber<? super String> subscriber) {
                subscriber.onNext("hello RxJava");
                subscriber.onNext("hi");
                subscriber.onCompleted();
            }
        });

2 创建Subscriber

    Subscriber<String> subscriber = new Subscriber<String>() {
            @Override
            public void onCompleted() {
                Log.i(TAG, "onCompleted");
            }
            @Override
            public void onError(Throwable e) {
                Log.i(TAG, e.getMessage());
            }
            @Override
            public void onNext(String s) {
                Log.i(TAG, s);
            }
        };

3 两者关联起来

observable.subscribe(subscriber);

4 运行结果

hello RxJava
hi
onCompleted
创建操作详细
create
 Observable.create(OnSubscribe)

OnSubcribe是一个了是Listener之类的东西,暂时不管,只是知道他有一个call方法,可以通过该call方法回调Subscriber的onNext,onComplete,onError方法。

just

他可以接收1~9个参数,例子如下

  Observable.just("A","B","C").subscribe(new Subscriber<String>() {
            @Override
            public void onCompleted() {
                Log.i(TAG, "onCompleted");
            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(String s) {
                Log.i(TAG, s);
            }
        });

他会依次调用Subscriber的onNext,onNext,onComplete/onError,这里会打印

A
B
C
onCompleted

他的OnSubscribe类型是:

OnSubscribeFromArray-->数组

from

接收一个Iterable对象(集合List)或者是数组对象,或者是一个线程的Future,例子如下

        Observable.from(new String[]{"A","B","C","D"}).subscribe(new Action1<String>() {
            @Override
            public void call(String s) {

            }
        });

他的 OnSubscribe类型是:

OnSubscribeFromIterable -->Iterable
OnSubscribeFromArray -->数组
ToObservableFuture --> Future

从这里可以看出,just是最终的实现是调用了from操作符。

Defer

直到有订阅者倍subscribe的时候才会创建

 str = "Hello,RxJava";
        Observable<String> observable = Observable.defer(new Func0<Observable<String>>() {
            @Override
            public Observable<String> call() {
                return Observable.just(str);
            }
        });
        str = "hi,RxJava";
        observable.subscribe(new Action1<String>() {
            @Override
            public void call(String s) {
                Log.i(TAG, s);
            }
        });

输出的结果是:

hi,RxJava

当你使用别的操作符去生成observable的时候发现会是“Hello,RxJava”
他的OnSubscribe类型是

OnSubscribeDefer --> 泛型

Interval

固定时间间隔发送整数序列的Observable,类似一个计数器,例子

         Observable.interval(1, TimeUnit.SECONDS,Schedulers.io()).subscribe(new Action1<Long>() {
            @Override
            public void call(Long aLong) {
                Log.i(TAG, String.valueOf(aLong));
            }
        });

需要注意的是:在Android,在UI线程中去使用,需要制定interval的调度器
参数说明

//第一个参数是延时多久开始,第二个参数是每隔多久计时,第三个参数是计时类型,比如TimeUnit .SECONDS,TimeUnit.HOURS等,第四个是调度器,其他重载的方法类似
Observable<Long> interval(long initialDelay, long period, TimeUnit unit,Schedulers scheduler)

range

创建一个特定序列的Observable,例子

 Observable.range(10, 5).subscribe(new Action1<Integer>() {
            @Override
            public void call(Integer integer) {
                Log.i(TAG, integer.toString());
            }
        });

当然你也可以知道调度器。其中,第一个是start,第二个参数是count,比如例子的意思就是从10开始,生产5个连续的int,就是10,11,12,13,14

OnSubscribeRange --> start ,end

repeat

重复发送使用一个Observable,例子

 Observable.range(10, 2).repeat(4).subscribe(new Action1<Integer>() {
            @Override
            public void call(Integer integer) {
                Log.i(TAG, integer.toString());
            }
        });

他默认是在一个新线程去运行的,需要注意的是repeat不是一个static方法,他是操作在一个Observable之上的。

timer

用于延迟多久之后开始某动作,例子

    Observable.timer(2,TimeUnit.SECONDS, Schedulers.newThread()).subscribe(new Action1<Long>() {
            @Override
            public void call(Long aLong) {
                Log.i(TAG, aLong.toString());
            }
        });

empty ,never,error

用来处理特殊情况的Observable

        Observable.empty(); //用来发送不发射任何数据的但是正常结束的Observable
        Observable.never();// 不发射数据也不终止
        Observable.error(new Throwable());// 发射一个错误

他的使用就是你需要返回一个Observable对象,但是这个对象又不能为空,又不能去处理事情的时候就可以使用。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据预处理、建模和可视化是数据分析过程中非常重要的环节,这些环节的成功与否直接影响到数据分析的结果与价值。作为CSDN数据分析的三大关键步骤,数据预处理、建模和可视化的作用是多方面的。 首先,数据预处理的目的是对原始数据进行清洗、处理和转换,以便更好地进行后续数据分析。数据预处理有很多种方法,如数据清洗、缺失值填充、异常值处理、数据集成、数据降维等。只有在预处理阶段对数据进行充分准确的处理,才能保证后续的建模和可视化的准确性。 其次,建模是数据分析的核心步骤,是通过数据分析来建立模型的过程,目标是对数据进行预测和决策。建模过程包括选择建模方法,配置模型参数,模型训练和模型评估等步骤。建模需要根据实际问题选择合适的建模方法,并进行适量的特征工程和模型调参,以获得最优的预测和决策效果。 最后,可视化是数据分析结果的展示方式,旨在将结果呈现给用户,在数据探索和决策时加强用户的感性理解。可视化可以采用多种图表形式,例如柱状图、折线图、散点图等,也可以通过交互式可视化系统进行交互操作表示。通过可视化,数据分析器可以更直观地理解数据分析的结果,为后续的分析和决策提供有力支持。 综上所述,CSDN数据分析中的数据预处理、建模和可视化是相互依存、相辅相成的环节,只有将它们表现得尽善尽美,我们才能解决实际问题,提高数据因信而产生的价值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值