*/
@Test
public void countDemo()
{
String[] items = {“one”, “two”, “three”, “four”};
Integer count = Observable
.from(items)
.count() .toBlocking().single();
log.info(“计数的结果为 {}”,count);
}
}
运行以上代码,输出的结果节选如下:
[main] INFO
c.c.d.r.basic.AggregateDemo - 计数的结果为 4可以看出,count操作符将一个Observable源流转换成一个弹射单个值的Observable输出流,输出流的唯一数据项的值为原始Observable流所弹射的数据项数量。
在上面的代码中,为了获取count输出流中的数据项,使用了toBlocking()和single()两个操作符。其中,Observable.toBlocking()操作返回了一个BlockingObservable阻塞型实例,该类型不是一种新的数据流,仅仅是对源Observable的包装,只是该类型会阻塞当前线程,一直等待直到内部的源Observable弹射了自己想要的数据。BlockingObservable.single()方法表示阻塞当前线程,直到从封装的源Observable获取到唯一的弹射数据元素项,如果Observable源流弹射出的数据元素不止一个,single()方法就会抛出异常。
reduce操作符
==========
Reduce(归约)操作符对一个O