RxJava操作符(八)Aggregate
来源:互联网 发布:matlab数据转换 编辑:程序博客网 时间:2024/04/29 12:44
RxJava操作符(八)Aggregate
原文链接 http://blog.chinaunix.net/uid-20771867-id-5209862.html
在这篇文章里我们来了解一下Rxjava的聚合操作符。
一、Contact
Contact操作符将多个Observable结合成一个Observable并发射数据,并且严格按照先后顺序发射数据,前一个Observable的数据没有发射完,是不能发射后面Observable的数据的。
有两个操作符跟它类似,但是有区别,分别是
1.startWith:仅仅是在前面插上一个数据。
2.merge:其发射的数据是无序的。
二、Count
Count操作符用来统计源Observable发射了多少个数据,最后将数目给发射出来;如果源Observable发射错误,则会将错误直接报出来;在源Observable没有终止前,count是不会发射统计数据的。
下面使用Contact和Count操作符来结合多个Observable和统计发射数据的数目
点击(此处)折叠或打开
- private Observable<Integer> contactObserver() {
- Observable<Integer> obser1 = Observable.just(1, 2, 3);
- Observable<Integer> obser2 = Observable.just(4, 5, 6);
- Observable<Integer> obser3 = Observable.just(7, 8, 9);
- return Observable.concat(obser1, obser2, obser3);
- }
- private Observable<Integer> conuntObserver() {
- return Observable.just(1, 2, 3).count();
- }
点击(此处)折叠或打开
- mLButton.setText("contact");
- mLButton.setOnClickListener(e -> contactObserver().subscribe(i -> log("contact:" + i)));
- mRButton.setText("conunt");
- mRButton.setOnClickListener(e -> conuntObserver().subscribe(i -> log("conunt:" + i)));
三、Reduce、Collect
Reduce操作符应用一个函数接收Observable发射的数据和函数的计算结果作为下次计算的参数,输出最后的结果。跟前面我们了解过的scan操作符很类似,只是scan会输出每次计算的结果,而reduce只会输出最后的结果。
Collect操作符类似于Reduce,但是其目的不同,collect用来将源Observable发射的数据给收集到一个数据结构里面,需要使用两个参数:
1.一个产生收集数据结构的函数。
2.一个接收第一个函数产生的数据结构和源Observable发射的数据作为参数的函数。
下面我们来使用一下reduce和collect操作符。同当初scan的例子一样,我们使用一个装了10个数字2的list创建源Observable。
点击(此处)折叠或打开
- private Observable<Integer> reduceObserver() {
- return Observable.from(list).reduce((x, y) -> x * y);
- }
- private Observable<ArrayList<Integer>> collectObserver() {
- return Observable.from(list).collect(() -> new ArrayList<>(), (integers, integer) -> integers.add(integer));
- }
点击(此处)折叠或打开
- mLButton.setText("reduce");
- mLButton.setOnClickListener(e -> reduceObserver().subscribe(i -> log("reduce:" + i)));
- mRButton.setText("collect");
- mRButton.setOnClickListener(e -> collectObserver().subscribe(i -> log("collect:" + i)));
聚合操作符比较少,就到这里了,本文中的源代码见https://github.com/Chaoba/RxJavaDemo
0 0
- RxJava操作符(八)Aggregate
- RxJava操作符(八)Aggregate
- RxJava操作符(八)Aggregate
- RxJava操作符(八)Aggregate
- RxJava操作符(八)Aggregate
- RxJava(八)concat符操作处理多数据源
- RxJava 学习笔记(八) --- Combining 结合操作
- (八)RxJava:PublishSubject
- Rxjava(2.操作符)
- [RxJava笔记]RxJava操作符
- Android RxJava使用介绍(二) RxJava的操作符
- Android RxJava使用介绍(三) RxJava的操作符
- Android RxJava使用介绍(四) RxJava的操作符
- Android RxJava使用介绍(二) RxJava的操作符
- Android RxJava使用介绍(三) RxJava的操作符
- Android RxJava使用介绍(四) RxJava的操作符
- Android RxJava使用介绍(二) RxJava的操作符
- Android RxJava使用介绍(二) RxJava的操作符
- 电容
- HTTP协议以及Servlet
- Leetcode #25 Reverse Nodes in k-Group
- Log4J
- 最全的c++map的用法
- RxJava操作符(八)Aggregate
- 没有躲过的坑--指针(内存泄露)
- 笔记片段
- C++基础——bitset与vector<bool>
- MySQL基本指令
- python入门犯错
- HDU 5536 Chip Factory (2015长春J题&&Trie树)
- 黑马程序员——JAVA基础----多态、抽象类和接口
- IDEA快捷键