博客
关于我
RxJava2 / RxAndroid2操作符distinct与distinctUntilChanged去重结果异同
阅读量:206 次
发布时间:2019-02-28

本文共 3280 字,大约阅读时间需要 10 分钟。

代码解析与运行结果分析

在本次项目中,我们采用了Retrofit框架来处理网络请求,并结合RxJava进行数据处理和异步操作。以下是核心代码逻辑的实现细节及运行结果分析。

代码结构分析

项目的主要类位于MainActivity中,以下是关键代码片段:

public class MainActivity extends AppCompatActivity {    private static final String TAG = getClass().getSimpleName();    private CompositeDisposable mCompositeDisposable = new CompositeDisposable();    private Integer[] test_data = {1, 1, 2, 3, 4, 5, 2, 5, 3, 6, 4, 7, 7, 8, 9};    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        test();    }    private void test() {        Observable
observable1 = Observable.fromArray(test_data) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .distinct() .subscribeWith(getObserver(0)); Observable
observable2 = Observable.fromArray(test_data) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .distinctUntilChanged() .subscribeWith(getObserver(1)); mCompositeDisposable.addAll(observable1, observable2); } private DisposableObserver getObserver(final int id) { return new DisposableObserver
() { @Override public void onNext(Object o) { Log.d(id + TAG, "#####开始#####"); Log.d(id + "数据", String.valueOf(o)); Log.d(id + TAG, "#####结束#####"); } @Override public void onComplete() { Log.d(id + TAG, "onComplete"); } @Override public void onError(Throwable e) { Log.e(id + TAG, e.toString(), e); } }; } @Override protected void onDestroy() { super.onDestroy(); mCompositeDisposable.clear(); }}

代码解释

  • test()方法:这是数据处理的核心逻辑,通过两个可观ables分别处理数据。

  • observable1

    • 使用fromArray()创建一个基于test_data数组的可观ables。
    • subscribeOn(Schedulers.io()):指定在IO线程上执行订阅。
    • observeOn(AndroidSchedulers.mainThread()):指定在主线程上执行订阅。
    • distinct():去除重复数据。
    • subscribeWith(getObserver(0)):注册一个观察器,用于接收数据。
  • observable2

    • observable1类似,但使用了distinctUntilChanged(),表示在数据发生变化时才触发新的订阅。
  • CompositeDisposable:用于管理多个可观ables的订阅,确保在onDestroy()时能够及时清理资源。

  • getObserver(int id):创建一个自定义的DisposableObserver,用于接收数据变化事件,日志中标记了不同的ID以区分不同观察器的输出。

  • 运行结果分析

    运行结果如下:

    05-18 10:57:55.069 4374-4374/zhangphil.app D/0MainActivity: #####开始#####05-18 10:57:55.070 4374-4374/zhangphil.app D/0数据: 105-18 10:57:55.070 4374-4374/zhangphil.app D/0MainActivity: #####结束#####05-18 10:57:55.070 4374-4374/zhangphil.app D/0MainActivity: #####开始#####05-18 10:57:55.070 4374-4374/zhangphil.app D/0数据: 2...
    05-18 10:57:55.071 4374-4374/zhangphil.app D/1MainActivity: #####开始#####05-18 10:57:55.071 4374-4374/zhangphil.app D/1数据: 105-18 10:57:55.071 4374-4374/zhangphil.app D/1MainActivity: #####结束#####05-18 10:57:55.071 4374-4374/zhangphil.app D/1MainActivity: #####开始#####05-18 10:57:55.071 4374-4374/zhangphil.app D/1数据: 2...

    运行结果表明,两个观察器分别处理了原始数据和去重后的数据。observable1使用了distinct()操作,直接去除重复数据;而observable2使用了distinctUntilChanged(),只有在数据发生变化时才触发新的订阅。

    优化效果分析

  • 去重处理:通过不同的去重操作,展示了两种常用的去重方式。
  • 异步处理:确保了主线程的UI更新,避免了UI卡顿。
  • 资源管理:通过CompositeDisposable实现了对资源的自动管理,提升了代码的健壮性。
  • 这种设计方式既保证了代码的简洁性,又充分发挥了RxJava的优势,适用于需要处理大量数据并进行实时更新的场景。

    转载地址:http://hugs.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现area under curve曲线下面积算法(附完整源码)
    查看>>
    Objective-C实现atoi函数功能(附完整源码)
    查看>>
    Objective-C实现base64加密和base64解密算法(附完整源码)
    查看>>
    Objective-C实现base85 编码算法(附完整源码)
    查看>>
    Objective-C实现basic graphs基本图算法(附完整源码)
    查看>>
    Objective-C实现BCC校验计算(附完整源码)
    查看>>
    Objective-C实现bead sort珠排序算法(附完整源码)
    查看>>
    Objective-C实现BeadSort珠排序算法(附完整源码)
    查看>>
    Objective-C实现bellman ford贝尔曼福特算法(附完整源码)
    查看>>
    Objective-C实现bellman-ford贝尔曼-福特算法(附完整源码)
    查看>>
    Objective-C实现bellman-ford贝尔曼-福特算法(附完整源码)
    查看>>
    Objective-C实现BellmanFord贝尔曼-福特算法(附完整源码)
    查看>>
    Objective-C实现BF算法 (附完整源码)
    查看>>
    Objective-C实现binary exponentiation二进制幂运算算法(附完整源码)
    查看>>
    Objective-C实现binary tree traversal二叉树遍历算法(附完整源码)
    查看>>
    Objective-C实现binomial coefficient二项式系数算法(附完整源码)
    查看>>
    Objective-C实现BitMap算法(附完整源码)
    查看>>
    Objective-C实现bitonic sort双调排序算法(附完整源码)
    查看>>
    Objective-C实现bogo sort排序算法(附完整源码)
    查看>>
    Objective-C实现BP误差逆传播算法(附完整源码)
    查看>>