RxJava 和 RxAndroid 二(操作符的使用)

 1、merge操作符,合并观察对象19 List<String> list1 = new ArrayList<>() ;20 List<String> list2 = new ArrayList<>() ;21 22 list1.add( "1" ) ;23 li...
摘要由CSDN通过智能技术生成

 

1、merge操作符,合并观察对象

复制代码

19         List<String> list1 = new ArrayList<>() ;
20         List<String> list2 = new ArrayList<>() ;
21 
22         list1.add( "1" ) ;
23         list1.add( "2" ) ;
24         list1.add( "3" ) ;
25 
26         list2.add( "a" ) ;
27         list2.add( "b" ) ;
28         list2.add( "c" ) ;
29 
30         Observable observable1 = Observable.from( list1 ) ;
31         Observable observable2 = Observable.from( list2 ) ;
32 
33         //合并数据  先发送observable2的全部数据,然后发送 observable1的全部数据
34         Observable observable = Observable.merge( observable2 , observable1 ) ;
35 
36         observable.subscribe(new Action1() {
37             @Override
38             public void call(Object o) {
39              System.out.println( "rx-- " + o );
40             }
41         }) ;
42 

复制代码

运行结果

2、zip  操作符,合并多个观察对象的数据。并且允许 Func2()函数重新发送合并后的数据

List<String> list1 = new ArrayList<>() ;

       List<String> list2 = new ArrayList<>() ;



       list1.add( "1" ) ;

       list1.add( "2" ) ;

       list1.add( "3" ) ;



       list2.add( "a" ) ;

       list2.add( "b" ) ;

       list2.add( "c" ) ;

       list2.add( "d" ) ;



       Observable observable1 = Observable.from( list1 ) ;

       Observable observable2 = Observable.from( list2 ) ;

        

      Observable observable3 =  Observable.zip(observable1, observable2, new Func2<String , String , String >() {

           @Override

           public String call(String s1 , String s2 ) {

               return s1 + s2  ;

           }

       }) ;



       observable3.subscribe(new Action1() {

           @Override

           public void call(Object o) {

               System.out.println( "zip-- " + o );

           }

       }) ;


  运行效果:从效果图上可以看出,合并两个的观察对象数据项应该是相等的;如果出现了数据项不等的情况,合并的数据项以最小数据队列为准。

 

3、scan累加器操作符的使用

Observable observable = Observable.just( 1 , 2 , 3 , 4 , 5  ) ;

       observable.scan(new Func2<Integer,Integer,Integer>() {

           @Override

           public Integer call(Integer o, Integer o2) {

               return o + o2 ;

           }

       })

         .subscribe(new Action1() {

             @Override

             public void call(Object o) {

                 System.out.println( "scan-- " +  o );

             }

         })   ;


        第一次发射得到1,作为结果与2相加;发射得到3,作为结果与3相加,以此类推,打印结果:  运行效果:

       

 

4、filter 过滤操作符的使用

Observable observable = Observable.just( 1 , 2 , 3 , 4 , 5 , 6 , 7 ) ;

observable.filter(new Func1<Integer , Boolean>() {

    @Override

    public Boolean call(Integer o) {

        //数据大于4的时候才会被发送

        return o > 4 ;

    }

})

        .subscribe(new Action1() {

            @Override

            public void call(Object o) {

                System.out.println( "filter-- " +  o );

            }

        })   ;

 

  运行效果

 

 

5、 消息数量过滤操作符的使用    

  • take :取前n个数据
  • takeLast:取后n个数据
  • first 只发送第一个数据
  • last 只发送最后一个数据
  • skip() 跳过前n个数据发送后面的数据
  • skipLast() 跳过最后n个数据,发送前面的数据
//take 发送前3个数据

       Observable observable = Observable.just( 1 , 2 , 3 , 4 , 5 , 6 , 7 ) ;

       observable.take( 3 )

               .subscribe(new Action1() {

                   @Override

                   public void call(Object o) {

                       System.out.println( "take-- " +  o );

                   }

               })   ;



       //takeLast 发送最后三个数据

       Obser
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值