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