具体怎么用我就不说了 你们都懂 我直接上传事例吧

package com.demo.testRxjava;

import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.View;

import com.demo.LogUtils;
import com.demo.R;
import com.demo.bean.School;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;

import rx.Observable;
import rx.Observer;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Action1;
import rx.functions.Func1;
import rx.schedulers.Schedulers;

/**
 * Created by pangw on 2017/12/21.
 */

public class TestRxjava extends Activity {@Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_rxjava);
        findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {@Override
            public void onClick(View view) {iniClick17();
            }});
    }/**
     * 过滤filter
     */
    private void iniClick17() {Observable.just(1,2,3,4,5,6).filter(new Func1<Integer, Boolean>() {@Override
                    public Boolean call(Integer integer) {return integer>3;
                    }}).subscribe(new Action1<Integer>() {@Override
                    public void call(Integer integer) {LogUtils.a(integer);
                    }});

    }/**
     * Distinct:去掉重复的项,比较好理解:
     */
    private void iniClick16() {Observable.just("1","2",3,"3","2","5","6","4").distinct().subscribe(new Action1<Serializable>() {@Override
                    public void call(Serializable serializable) {LogUtils.a(serializable);
                    }});
    }/**
     * Take:发射前n项数据,还是用上面的例子,假设不要改所有学校的名称了,就改前四个学校的名称:
     */
    private void iniClick15() {List<School> list = new ArrayList<>();
        for(int i=0;i<5;i++){School school = new School();
            school.setName("name"+i);
            List<School.Student> students = new ArrayList<>();
            for(int y=0;y<=i;y++){School.Student student = new School.Student();
                student.setName("student name "+i+"-"+y);
                students.add(student);
            }school.setStudentList(students);
            list.add(school);
        }Observable.from(list).take(3).map(new Func1<School, School>() {@Override
                    public School call(School school) {school.setName("嘻哈哈大学");
                        return school;
                    }}).subscribe(new Action1<School>() {@Override
            public void call(School school) {}});
        Observable.from(list).subscribe(new Action1<School>() {@Override
                    public void call(School school) {LogUtils.a(school.getName());
                    }});

    }/**
     * map 和 buffer 结合使用
     */
    private void iniClick14() {List<School> list = new ArrayList<>();
        for(int i=0;i<5;i++){School school = new School();
            school.setName("name"+i);
            List<School.Student> students = new ArrayList<>();
            for(int y=0;y<=i;y++){School.Student student = new School.Student();
                student.setName("student name "+i+"-"+y);
                students.add(student);
            }school.setStudentList(students);
            list.add(school);
        }Observable.from(list).map(new Func1<School, School>() {@Override
                    public School call(School school) {school.setName("nb大学");
                        return school;
                    }}).buffer(list.size()).subscribe(new Action1<List<School>>() {@Override
                    public void call(List<School> schools) {}});

    }/**
     * Buffer:缓存,可以设置缓存大小,缓存满后,以list的方式将数据发送出去;例:
     */
    private void iniClick13() {Observable.just(1,2,3,4,5).buffer(2).subscribe(new Action1<List<Integer>>() {@Override
                    public void call(List<Integer> integers) {LogUtils.a(integers.size());
                    }});
    }/**
     * flagmap
     * 若打印全国的学生的名字
     * 总之 flagmap 就是吧一个observer转化为另一个observer
     */
    private void iniClick12() {List<School> list = new ArrayList<>();
        for(int i=0;i<5;i++){School school = new School();
            school.setName("name"+i);
            List<School.Student> students = new ArrayList<>();
            for(int y=0;y<=i;y++){School.Student student = new School.Student();
                student.setName("student name "+i+"-"+y);
                students.add(student);
            }school.setStudentList(students);
            list.add(school);
        }Observable.from(list).flatMap(new Func1<School, Observable<School.Student>>() {@Override
                    public Observable<School.Student> call(School school) {return Observable.from(school.getStudentList());
                    }}).map(new Func1<School.Student, String>() {@Override
                    public String call(School.Student student) {return student.getName();
                    }}).subscribe(new Action1<String>() {@Override
                    public void call(String s) {LogUtils.a(s);
                    }});

    }/**
     * flagmap
     * 若打印全国的学校名称
     */
    private void iniClick11() {List<School> list = new ArrayList<>();
        for(int i=0;i<5;i++){School school = new School();
            school.setName("name"+i);
            List<School.Student> students = new ArrayList<>();
            for(int y=0;y<=i;y++){School.Student student = new School.Student();
                student.setName("student name "+i+"-"+y);
                students.add(student);
            }school.setStudentList(students);
            list.add(school);
        }Observable.from(list).map(new Func1<School, String>() {@Override
                    public String call(School school) {return school.getName();
                    }}).subscribe(new Action1<String>() {@Override
                    public void call(String s) {LogUtils.a(s);
                    }});

    }/**
     * map
     */
    private void iniClick10() {Observable.just(1234).map(new Func1<Integer, String>() {@Override
                    public String call(Integer integer) {//2000
                        return integer+1000+"";
                    }}).subscribe(new Action1<String>() {@Override
                    public void call(String s) {LogUtils.a(s);
                    }});

    }/**
     * 模拟后台 记载数据更新到前台进程
     * 简单粗暴的解释一下,subscribeOn( )决定了发射数据在哪个调度器上执行,
     * observeOn(AndroidSchedulers.mainThread())则指定数据接收发生在UI线程,简直不要太方便。
     */
    private void iniClick9() {Observable.create(new Observable.OnSubscribe<String>() {@Override
            public void call(Subscriber<? super String> subscriber) {//数据库获取数据
                String is = "this is main";
                try {Thread.sleep(3000);
                } catch (InterruptedException e) {e.printStackTrace();
                }//发射
                subscriber.onNext(is);
             }}).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1<String>() {@Override
                    public void call(String s) {LogUtils.a(s);
                    }});

    }/**
     *mObserver的onNext方法将会依次收到来自justObservable的数据"just1"、"just2",
     * 另外,如果你不在意数据是否接收完或者是否出现错误,即不需要Observer的onCompleted()和onError()方法,
     * 可使用Action1,subscribe()支持将Action1作为参数传入,RxJava将会调用它的call方法来接收数据,
     */
    private void iniClick8() {Observable.just("this action 01","this is action 02").subscribe(new Action1<String>() {@Override
                    public void call(String s) {LogUtils.a(s);
                    }});
    }/**
     * 使用repeat( ),创建一个重复发射特定数据的Observable:
     * 下例是重复发送2次
     *
     */
    private void iniClick7() {Observable.just("wo shi repeat").repeat(2).subscribe(new Observer<String>() {@Override
                    public void onCompleted() {LogUtils.a("onCompleted");

                    }@Override
                    public void onError(Throwable e) {}@Override
                    public void onNext(String s) {LogUtils.a("onNext:"+s);

                    }});
    }/**
     * 使用timer( ),创建一个Observable,它在一个给定的延迟后发射一个特殊的值,等同于Android中Handler的postDelay( )方法
     */
    private void iniClick6() {Observable.timer(3,TimeUnit.SECONDS).subscribe(new Observer<Long>() {@Override
                    public void onCompleted() {LogUtils.a("onCompleted");

                    }@Override
                    public void onError(Throwable e) {}@Override
                    public void onNext(Long aLong) {LogUtils.a("onNext:"+aLong);

                    }});
    }/**
     * .使用range( ),创建一个发射特定整数序列的Observable,第一个参数为起始值,第二个为发送的个数,如果为0则不发送,负数则抛异常:
     */
    private void iniClick5() {Observable.range(100,100).subscribe(new Observer<Integer>() {@Override
                    public void onCompleted() {LogUtils.a("onCompleted");

                    }@Override
                    public void onError(Throwable e) {}@Override
                    public void onNext(Integer integer) {LogUtils.a("onNext:"+integer);

                    }});
    }/**
     *interval
     * 使用interval( ),创建一个按固定时间间隔发射整数序列的Observable,可用作定时器:
     */
    private void iniClick4() {Observable.interval(1,TimeUnit.SECONDS).subscribe(new Observer<Long>() {@Override
                    public void onCompleted() {LogUtils.a("onCompleted:");

                    }@Override
                    public void onError(Throwable e) {}@Override
                    public void onNext(Long aLong) {LogUtils.a("onNext:"+aLong);

                    }});
    }/**
     * from 发送的是集合的每个item
     * er just 是发送一个集合
     */
    private void iniClick3() {List<String> list = new ArrayList<>();
        list.add("wo si 1");
        list.add("wo si 2");
        list.add("wo si 3");
        Observable.from(list).subscribe(new Observer<String>() {@Override
                    public void onCompleted() {LogUtils.a("onCompleted");

                    }@Override
                    public void onError(Throwable e) {}@Override
                    public void onNext(String s) {LogUtils.a("onNext"+s);

                    }});
    }/**
     * just 自动执行 next 方法
     * 执行完毕好 自动执行onCompleted方法
     */
    private void iniClick2() {Observable.just("大家后才是真的好 广州好滴","我不好").subscribe(new Observer<String>() {@Override
                    public void onCompleted() {LogUtils.a("onCompleted");
                    }@Override
                    public void onError(Throwable e) {}@Override
                    public void onNext(String s) {LogUtils.a("onNext" + s);
                    }});

    }/**
     * create
     * 最基本的
     */
    private void iniClick() {Observable.create(new Observable.OnSubscribe<String>() {@Override
            public void call(Subscriber<? super String> subscriber) {subscriber.onNext("大叫好才是真的好 广州好滴");
                subscriber.onCompleted();
                subscriber.onNext("大叫好才是真的好 广州好滴222");

            }}).subscribe(new Observer<String>() {@Override
            public void onCompleted() {LogUtils.a("onCompleted");

            }@Override
            public void onError(Throwable e) {}@Override
            public void onNext(String s) {LogUtils.a("onNext:" + s);

            }});

    }
}

rxjava 常用用法实例相关推荐

  1. php中 datalist,html5 datalist标签的用法是什么?这里有datalist标签的用法实例

    本篇文章主要为大家讲述了关于html5 datalist标签的用法及html5 datalist标签的用法实例.本文说了两个常用的选项框的实例供大家选择观看,下面就让我们一起来看这篇文章吧 我们先来看 ...

  2. Go语言MD5加密用法实例

    Go语言MD5加密用法实例 本文实例讲述了Go语言MD5加密用法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: import (     "crypto/md5" ...

  3. python mysqldb cursor_python中MySQLdb模块用法实例

    转载自:http://www.jb51.net/article/57290.htm 姓名:梅金波                        学号:16010110036 [嵌牛导读]MySQLdb ...

  4. input type=range标签用法实例代码

    在HTML5中,又新增许多新<input>控件类型,比较实用的一个就是<input type="range">,以滑竿的方式来调整value值,在这以前需要 ...

  5. PHP中的常见魔术方法功能作用及用法实例

    这篇文章主要介绍了PHP中的常见魔术方法功能作用及用法实例,本文讲解了构造函数和析构函数__construct()和__desctruct()以及属性重载(Property Overloading)_ ...

  6. traceroute命令的用法实例

    ceroute命令的用法实例 traceroute 跟踪数据包到达网络主机所经过的路由工具: traceroute 是用来发出数据包的主机到目标主机之间所经过的网关的工具.traceroute 的原理 ...

  7. python中mysqldb模块_python中MySQLdb模块用法实例

    本文实例讲述了python中MySQLdb模块用法.分享给大家供大家参考.具体用法分析如下: MySQLdb其实有点像php或asp中连接数据库的一个模式了,只是MySQLdb是针对mysql连接了接 ...

  8. System 类 和 Runtime 类的常用用法

    System类的常用用法 1,主要获取系统的环境变量信息 public static void sysProp()throws Exception{Map<String,String> e ...

  9. linux 关联数组,Linux shell数组与关联数组的用法实例

    Linux shell数组与关联数组的用法实例 1. 关联数组 使用 declare -A(declare 的用法请使用 help 进行查看,help declare) 进行声明关联数组变量: $ d ...

最新文章

  1. 《C程序猿从校园到职场》勘误
  2. VC++的应用程序框架中各类之间的访问方法
  3. 一套优雅的 Go 错误问题解决方案
  4. 互联网加大赛历届作品_匠心筑梦 ——家具漆服务系统2020年度涂装大赛成功举办...
  5. 让Mysql支持Emoji表情,解决[Err] 1366 - Incorrect string value: '\xF0\xA3\x84\x83'
  6. 使用viewPage实现图片轮播
  7. android 多数据图表,Android统计图表MPAndroidChart:为多条统计折线动态更新数据,以高温低温曲线为例【7】...
  8. rpm和yum的使用
  9. UUIDHexGenerator
  10. 小程序简介和开发工具
  11. 解决安装MATLAB2018a后出现License Manager Error -8的问题
  12. Python项目(Django):国内新冠肺炎疫情大数据可视化平台
  13. 苹果测试版最新发行说明,iOS 15.4支持戴口罩解锁,Dropbox和OneDrive的云存储功能被打破
  14. 高性能计算中的并行计算、分布式计算、网格计算和云计算之间的区别与联系
  15. 『IT视界』 [IT风云]MyEclipse 8.5 开发环境配置 插件安装(转载)
  16. 2022企业电子邮件在哪里找,企业电子邮件系统哪个安全?
  17. 面试题:在浏览器输入 URL 回车之后发生了什么?(超详细版)
  18. NVIDIA TX2 使能CAN模块
  19. echarts的中国地图,点击进入省级地图,按需加载对应的省js,可返回中国地图
  20. JDK8 下载与安装教程,超简单版(Windows)

热门文章

  1. 递归问题之老鼠出迷宫
  2. 数据分析/算法/建模/产品实习面经(字节跳动、爱奇艺、平安科技、石墨文档、欧克云链、水滴、茄子快传……)
  3. canvas绘制分享商品海报——已完成
  4. 无法正常启动程序0xc0000142是什么意思?无法正常启动程序0xc0000142该如何解决?
  5. 茅山后裔吧 (转载,有好多不错的道理)
  6. 无需端口映射,实现外部网络访问Docker集群内部服务
  7. 柴油闪点不合格的原因
  8. HJ20 密码验证合格程序 Java
  9. items中多个checkgroup在IE6下无法完整显示
  10. 全国356城所有银行网点数据(截至2022.2.13)