RxJava汇总--完善中。。。

来源:互联网 发布:数据库怎么加锁 编辑:程序博客网 时间:2024/06/07 09:07

基本用法

 Observable.create(new Observable.OnSubscribe<String>(){            @Override            public void call(Subscriber<? super String> subscriber) {                subscriber.onNext("safly");                subscriber.onCompleted();            }        }).subscribe(new Subscriber<String>() {            @Override            public void onCompleted() {                Log.i(TAG,"------onCodddddmpleted---------");            }            @Override            public void onError(Throwable e) {            }            @Override            public void onNext(String s) {                Log.i(TAG,"------s---------"+s);            }        });        Observable.create(new Observable.OnSubscribe<String>() {            @Override            public void call(Subscriber<? super String> subscriber) {                subscriber.onNext("safly");            }        }).subscribe(new Action1<String>() {            @Override            public void call(String o) {                Log.i(TAG,"------onCodddddmplddeted---------"+o);            }        });      Observable.create(new Observable.OnSubscribe<String>() {            @Override            public void call(Subscriber<? super String> subscriber) {                subscriber.onNext("safly");            }        }).subscribe(new Observer<String>() {            @Override            public void onCompleted() {            }            @Override            public void onError(Throwable e) {            }            @Override            public void onNext(String s) {                Log.i(TAG,"------onCoddddfsflddeted---------"+s);            }        });

Just_map用法

 /**         * 只发出事件,不处理事件         */        Observable.just("safly1","safly2").subscribe(new Action1<String>() {            @Override            public void call(String s) {                Log.i(TAG,"------s-----------"+s);            }        });        /**         * 发出事件,处理事件         * 转换:将字符串转为integer对象         */        Observable.just("111","222")                .map(new Func1<String, Integer>() {            @Override            public Integer call(String s) {                return Integer.parseInt(s);            }        }).subscribe(new Action1<Integer>() {            @Override            public void call(Integer o) {                Log.i(TAG,"---------o----------------"+o);            }        });

range用法

   /**         * 代替for循环         * 左闭右开         */        Observable.range(0,5).subscribe(new Action1<Integer>() {            @Override             public void call(Integer integer) {                Log.i(TAG,"--------range------"+integer);            }        });

输出

07-03 11:55:55.333 26793-26793/? I/MainActivity: --------range------007-03 11:55:55.333 26793-26793/? I/MainActivity: --------range------107-03 11:55:55.333 26793-26793/? I/MainActivity: --------range------207-03 11:55:55.333 26793-26793/? I/MainActivity: --------range------307-03 11:55:55.333 26793-26793/? I/MainActivity: --------range------4
     Observable.range(1, 10).elementAt(5).subscribe(new Action1<Integer>() {            @Override            public void call(Integer integer) {                Log.i(TAG,"--------range------"+integer);            }        });

elementAt索引是5,所以输出

--------range------6

/**
* 执行2次循环
*/

       Observable.range(0, 2)                .repeat(2)                .subscribe(new Action1<Integer>() {                    @Override                    public void call(Integer integer) {                        Log.i(TAG, "repeat:" +integer.intValue());                    }                });

输出

07-03 12:04:53.070 29090-29090/? I/MainActivity: repeat:007-03 12:04:53.070 29090-29090/? I/MainActivity: repeat:107-03 12:04:53.070 29090-29090/? I/MainActivity: repeat:007-03 12:04:53.071 29090-29090/? I/MainActivity: repeat:1

interval、timer

      Observable.interval(2, TimeUnit.SECONDS).subscribe(new Action1<Long>() {            @Override            public void call(Long aLong) {                Log.i(TAG,"--------interval------"+aLong);            }        });

输出

07-03 12:10:40.950 30756-30775/? I/MainActivity: --------interval------007-03 12:10:42.950 30756-30775/? I/MainActivity: --------interval------107-03 12:10:44.949 30756-30775/? I/MainActivity: --------interval------2。。。。循环下去

timer 2妙后执行一次

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

输出

07-03 12:13:04.484 31733-31760/? I/MainActivity: --------timer------0

defer

 String i = "10" ;        Observable.defer(new Func0<Observable<String>>() {            @Override            public Observable<String> call() {                i = "11" ;                return  Observable.just(i);            }        }).subscribe(new Action1<String>() {            @Override            public void call(String o) {                Log.i( TAG , "--defer after--" + o );            }        });

defer操作符是直到有订阅者订阅时,才通过Observable的工厂方法创建Observable并执行,defer操作符能够保证Observable的状态是最新的,而defer是在订阅者订阅时才创建Observable,此时才进行真正的赋值操作
输出

07-03 12:15:15.052 32379-32379/? I/MainActivity: --defer after--11

FutureTask

   /**         * 异步任务         */        final FutureTask futureTask = new FutureTask<Integer>(new Callable<Integer>() {            @Override            public Integer call() throws Exception {                Thread.sleep(5000);                return 11111;            }        });        Scheduler.Worker worker = Schedulers.io().createWorker();        worker.schedule(new Action0() {            @Override            public void call() {                futureTask.run();            }        });        Observable.from(futureTask)                .subscribeOn(Schedulers.io())                .observeOn(AndroidSchedulers.mainThread())                .subscribe(new Subscriber<Integer>() {            @Override            public void onCompleted() {                Log.i( TAG , "--FutureTask onCompleted--" );            }            @Override            public void onError(Throwable e) {                Log.i( TAG , "--FutureTask onNext--" + e.getMessage() );            }            @Override            public void onNext(Integer integer) {                Log.i( TAG , "--FutureTask onNext--" + integer );            }        });

输出

07-03 12:15:20.059 32379-32379/? I/MainActivity: --FutureTask onNext--11111

filter

/**
* filter过滤
* distinct去重复
*/

      Observable.just(1,2,3,4,5,1,2,3,4,5).filter(new Func1<Integer, Boolean>() {           @Override           public Boolean call(Integer integer) {               return integer%2 == 1;           }       })               .distinct()               .subscribe(new Action1<Integer>() {                   @Override                   public void call(Integer integer) {                       Log.i( TAG , "--filter onNext--" + integer );                   }               });

输出

07-03 12:25:53.828 3111-3111/? I/MainActivity: --filter onNext--107-03 12:25:53.828 3111-3111/? I/MainActivity: --filter onNext--307-03 12:25:53.828 3111-3111/? I/MainActivity: --filter onNext--5

take、takeWhile

     Observable.range(0,5).take(3).subscribe(new Action1<Integer>() {            @Override            public void call(Integer integer) {                Log.i( TAG , "--take onNext--" + integer );            }        });

输出:

07-03 12:28:54.786 4065-4065/? I/MainActivity: --take onNext--007-03 12:28:54.786 4065-4065/? I/MainActivity: --take onNext--107-03 12:28:54.786 4065-4065/? I/MainActivity: --take onNext--2
       Observable.range(0,10).take(7).takeWhile(new Func1<Integer, Boolean>() {            @Override            public Boolean call(Integer integer) {                return integer<5;            }        }).subscribe(new Action1<Integer>() {            @Override            public void call(Integer integer) {                Log.i( TAG , "--takeWhile onNext--" + integer );            }        });

输出

07-03 12:28:54.787 4065-4065/? I/MainActivity: --takeWhile onNext--007-03 12:28:54.787 4065-4065/? I/MainActivity: --takeWhile onNext--107-03 12:28:54.787 4065-4065/? I/MainActivity: --takeWhile onNext--207-03 12:28:54.787 4065-4065/? I/MainActivity: --takeWhile onNext--307-03 12:28:54.787 4065-4065/? I/MainActivity: --takeWhile onNext--4

skip、skipWhile

        Observable.range(0,5).skip(3).subscribe(new Action1<Integer>() {            @Override            public void call(Integer integer) {                Log.i( TAG , "--skip onNext--" + integer );            }        });

输出

07-03 12:32:01.436 5035-5035/? I/MainActivity: --skip onNext--307-03 12:32:01.436 5035-5035/? I/MainActivity: --skip onNext--4
    /**         * //舍弃原Observable发射的数据,直到发射的数据>=6,才继续发射         */        Observable.range(0,10).take(7).skipWhile(new Func1<Integer, Boolean>() {            @Override            public Boolean call(Integer integer) {                return integer<6;            }        }).subscribe(new Action1<Integer>() {            @Override            public void call(Integer integer) {                Log.i( TAG , "--skipWhile onNext--" + integer );            }        });

输出

07-03 12:32:01.436 5035-5035/? I/MainActivity: --skipWhile onNext--6

skipLast、takeLast

 /**         * skipLast 正好和skip 相反,忽略最后产生的n个数据项         */        Observable.range(0,5).skipLast(2).subscribe(new Action1<Integer>() {            @Override            public void call(Integer integer) {                Log.i( TAG , "--skipLast onNext--" + integer );            }        });
 07-03 12:36:01.928 6042-6042/? I/MainActivity: --skipLast onNext--007-03 12:36:01.928 6042-6042/? I/MainActivity: --skipLast onNext--107-03 12:36:01.928 6042-6042/? I/MainActivity: --skipLast onNext--2
     Observable.range(0,5).takeLast(2).subscribe(new Action1<Integer>() {            @Override            public void call(Integer integer) {                Log.i( TAG , "--takeLast onNext--" + integer );            }        });
07-03 12:36:01.928 6042-6042/? I/MainActivity: --takeLast onNext--307-03 12:36:01.929 6042-6042/? I/MainActivity: --takeLast onNext--4

all、exists、contains

  Observable.just(1,2,3,4,5).all(new Func1<Integer, Boolean>() {            @Override            public Boolean call(Integer integer) {                return integer>3;            }        }).subscribe(new Action1<Boolean>() {            @Override            public void call(Boolean aBoolean) {                Log.i( TAG , "--all onNext--" + aBoolean );            }        });

输出

07-03 12:42:10.185 7557-7557/? I/MainActivity: --all onNext--false
   Observable.just(1,2,3,4,5).exists(new Func1<Integer, Boolean>() {            @Override            public Boolean call(Integer integer) {                return integer>3;            }        }).subscribe(new Action1<Boolean>() {            @Override            public void call(Boolean aBoolean) {                Log.i( TAG , "--exists onNext--" + aBoolean );            }        });

输出

-03 12:42:10.185 7557-7557/? I/MainActivity: --exists onNext--true
     Observable.just(4,5,6)                .contains(4)                .subscribe(new Action1<Boolean>() {                    @Override                    public void call(Boolean aBoolean) {                        Log.v(TAG, "contains(4):"+aBoolean);                    }                });

输出

07-03 12:42:10.186 7557-7557/? V/MainActivity: contains(4):true

concat、concatWith

   Observable<Integer> just1 = Observable.just(1, 2, 3);        Observable<Integer> just2 = Observable.just(4, 5, 6);        Observable.concat(just1,just2).subscribe(new Action1<Integer>() {            @Override            public void call(Integer integer) {                Log.i( TAG , "--concat onNext--" + integer );            }        });        just1.concatWith(just2).subscribe(new Action1<Integer>() {            @Override            public void call(Integer integer) {                Log.i( TAG , "--concatWith onNext--" + integer );            }        });

输出

07-03 12:42:10.188 7557-7557/? I/MainActivity: --concat onNext--107-03 12:42:10.188 7557-7557/? I/MainActivity: --concat onNext--207-03 12:42:10.188 7557-7557/? I/MainActivity: --concat onNext--307-03 12:42:10.188 7557-7557/? I/MainActivity: --concat onNext--407-03 12:42:10.188 7557-7557/? I/MainActivity: --concat onNext--507-03 12:42:10.188 7557-7557/? I/MainActivity: --concat onNext--607-03 12:42:10.189 7557-7557/? I/MainActivity: --concatWith onNext--107-03 12:42:10.189 7557-7557/? I/MainActivity: --concatWith onNext--207-03 12:42:10.189 7557-7557/? I/MainActivity: --concatWith onNext--307-03 12:42:10.189 7557-7557/? I/MainActivity: --concatWith onNext--407-03 12:42:10.189 7557-7557/? I/MainActivity: --concatWith onNext--507-03 12:42:10.189 7557-7557/? I/MainActivity: --concatWith onNext--6

toList、toMap、toMultimap

  Observable<List<Integer>> listObservable = Observable.range(0, 5).toList();        listObservable.subscribe(new Action1<List<Integer>>() {            @Override            public void call(List<Integer> integers) {                for (int i : integers){                    Log.i(TAG,"------i-------"+i);                }            }        });

输出

07-03 12:42:10.190 7557-7557/? I/MainActivity: ------i-------007-03 12:42:10.190 7557-7557/? I/MainActivity: ------i-------107-03 12:42:10.190 7557-7557/? I/MainActivity: ------i-------207-03 12:42:10.190 7557-7557/? I/MainActivity: ------i-------307-03 12:42:10.191 7557-7557/? I/MainActivity: ------i-------4
       Observable.just(1,2,3).toMap(new Func1<Integer, String>() {            @Override            public String call(Integer integer) {                Log.i(TAG,"--call1--"+integer);                return "key--"+integer;            }        }, new Func1<Integer, String>() {            @Override            public String call(Integer integer) {                Log.i(TAG,"--call2--"+integer);                return "val--"+integer;            }        }).subscribe(new Action1<Map<String, String>>() {            @Override            public void call(Map<String, String> stringStringMap) {                Log.i(TAG,"--stringStringMap--"+stringStringMap.toString());            }        });

输出

07-03 12:42:10.191 7557-7557/? I/MainActivity: --call1--107-03 12:42:10.191 7557-7557/? I/MainActivity: --call1--207-03 12:42:10.192 7557-7557/? I/MainActivity: --call1--307-03 12:42:10.191 7557-7557/? I/MainActivity: --call2--107-03 12:42:10.191 7557-7557/? I/MainActivity: --call2--207-03 12:42:10.192 7557-7557/? I/MainActivity: --call2--307-03 12:42:10.192 7557-7557/? I/MainActivity: --stringStringMap--{key--1=val--1, key--2=val--2, key--3=val--3}
  Observable.just(1,2,3).toMultimap(new Func1<Integer, String>() {            @Override            public String call(Integer integer) {                Log.i(TAG,"--toMultimap call1--"+integer);                return "key--"+integer;            }        }, new Func1<Integer, String>() {            @Override            public String call(Integer integer) {                Log.i(TAG,"--toMultimap call2--"+integer);                return "val--"+integer;            }        }).subscribe(new Action1<Map<String, Collection<String>>>() {            @Override            public void call(Map<String, Collection<String>> stringCollectionMap) {                Log.i(TAG,"--stringCollectionMap--"+stringCollectionMap.toString());            }        });

输出

07-03 12:51:21.684 10195-10195/? I/MainActivity: --toMultimap call1--107-03 12:51:21.684 10195-10195/? I/MainActivity: --toMultimap call1--207-03 12:51:21.684 10195-10195/? I/MainActivity: --toMultimap call1--307-03 12:51:21.684 10195-10195/? I/MainActivity: --toMultimap call2--107-03 12:51:21.684 10195-10195/? I/MainActivity: --toMultimap call2--207-03 12:51:21.684 10195-10195/? I/MainActivity: --toMultimap call2--307-03 12:51:21.684 10195-10195/? I/MainActivity: --stringCollectionMap--{key--1=[val--1], key--2=[val--2], key--3=[val--3]}

nest

        Observable.range(0,4).nest().subscribe(new Action1<Observable<Integer>>() {            @Override            public void call(Observable<Integer> integerObservable) {                integerObservable.subscribe(new Action1<Integer>() {                    @Override                    public void call(Integer integer) {                        Log.i(TAG,"--nest2--"+integer);                    }                });            }        });

输出

07-03 12:51:21.685 10195-10195/? I/MainActivity: --nest2--007-03 12:51:21.685 10195-10195/? I/MainActivity: --nest2--107-03 12:51:21.685 10195-10195/? I/MainActivity: --nest2--207-03 12:51:21.685 10195-10195/? I/MainActivity: --nest2--3

flatMap用法

    Observable.just(2,3,4).flatMap(new Func1<Integer, Observable<Integer>>() {            @Override            public Observable<Integer> call(Integer integer) {                Observable<Integer> just = Observable.just(integer+1);                return just;            }        }).subscribe(new Action1<Integer>() {            @Override            public void call(Integer integer) {                Log.i(TAG,"--flatMap--"+integer);            }        });

输出

07-03 12:51:21.685 10195-10195/? I/MainActivity: --flatMap--307-03 12:51:21.685 10195-10195/? I/MainActivity: --flatMap--407-03 12:51:21.685 10195-10195/? I/MainActivity: --flatMap--5

flatMapIterable用法

    Observable.just(2,3,5)                .flatMapIterable(new Func1<Integer, Iterable<String>>() {                    @Override                    public Iterable<String> call(Integer integer) {                        List<String> list = new ArrayList<>();                        list.add(integer.toString());                        return list;                    }                }).subscribe(new Action1<String>() {            @Override            public void call(String s) {                Log.i(TAG,"--flatMapIterable--"+s);            }        });

输出

07-03 12:51:21.685 10195-10195/? I/MainActivity: --flatMapIterable--207-03 12:51:21.685 10195-10195/? I/MainActivity: --flatMapIterable--307-03 12:51:21.685 10195-10195/? I/MainActivity: --flatMapIterable--5