*/
@Test
public void takeDemo() throws InterruptedException
{
Observable.interval(1, TimeUnit.SECONDS) //设置执行间隔
.take(10) //10秒倒计时
.map(aLong -> 10 - aLong)
.subscribe(aLong -> log.info(aLong.toString()));
Thread.sleep(Integer.MAX_VALUE);
}}
运行这个演示程序,输出的结果如下:
[RxComputationScheduler-1] INFO c.c.d.r.b.OtherOperatorDemo - 10
[RxComputationScheduler-1] INFO c.c.d.r.b.OtherOperatorDemo - 9
[RxComputationScheduler-1] INFO c.c.d.r.b.OtherOperatorDemo - 8
[RxComputationScheduler-1] INFO c.c.d.r.b.OtherOperatorDemo - 7
[RxComputationScheduler-1] INFO c.c.d.r.b.OtherOperatorDemo - 6
[RxComputationScheduler-1] INFO c.c.d.r.b.OtherOperatorDemo - 5
[RxComputationScheduler-1] INFO c.c.d.r.b.OtherOperatorDemo - 4
[RxComputationScheduler-1] INFO c.c.d.r.b.OtherOperatorDemo - 3
[RxComputationScheduler-1] INFO c.c.d.r.b.OtherOperatorDemo - 2
[RxComputationScheduler-1] INFO c.c.d.r.b.OtherOperatorDemo - 1
skip操作符与take操作符类似,也是用于根据索引在源流上进行元素的挑选操作,只是take是取前n个元素,而skip是跳过前n个元素。注意,如果序列中的项少于指定索引,那么两个函数都抛出错误。
window操作符
==========
RxJava的窗口可以理解为固定数量(或者固定时间间隔)的元素分组。假定通过window操作符以固定数量n进行窗口划分,一旦流上弹射的元素的数量足够一个窗口的数量n,那么输出流上将弹出一个新的元素,输出元素是一个Observable主题对象,该主题包含源流窗口之内的n个元素。
使用window操作符创建固定数量窗口(滚动窗口)的处理流程如图4-12所示。
图4-12 使用window操作符创建固定数量窗口(滚动窗口)
一个使用window操作符以固定数量进行元素分组的示例程序如下:
package com.crazymaker.demo.rxJava.basic;
//省略import
@Slf4jpublic class WindowDemo
{
/**
*演示window创建操作符创建滚动窗口
*/
@Test
public void simpleWindowObserverDemo()
{
List srcList = Arrays.asList(10, 11, 20, 21, 30, 31);
Observable.from(srcList)
.window(3) //以固定数量分组
.flatMap(o -> o.toList())
.subscribe(list -> log.info(list.toString()));
}
…
}
运行这个演示程序,输出的结果如下:
[main] INFO c.c.d.rxJava.basic.WindowDemo - [10, 11, 20]
[main] INFO c.c.d.rxJava.basic.WindowDemo - [21, 30, 31]
在使用window进行分组时,不同窗口的元素还可以重叠,可以理解成滑动窗口。
创建重叠窗口使用函数window(int count,int skip),其中第一个参数为窗口的元素个数,第二个参数为下一个窗口跳过的元素个数。使用window操作符创建重叠窗口的处理流程如图4-13所示。
图4-13 使用window操作符创建重叠窗口(滑动窗口)
使用window操作符以固定数量创建重叠窗口的示例程序如下:
package com.crazymaker.demo.rxJava.basic;
//省略import
@Slf4j
public class WindowDemo
{
…
/**
*演示window创建操作符创建滑动窗口
*/
@Test
public void windowObserverDemo()
{
List srcList = Arrays.asList(10, 11, 20, 21, 30, 31);
Observable.from(srcList)
.window(3, 1)
.flatMap(o -> o.toList())
.subscribe(list -> log.info(list.toString()));
}
…
}
运行这个演示程序,输出的结果如下:
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
面试题总结
其它面试题(springboot、mybatis、并发、java中高级面试总结等)
**
[外链图片转存中…(img-v6OHVhPP-1711961056584)]
面试题总结
其它面试题(springboot、mybatis、并发、java中高级面试总结等)
[外链图片转存中…(img-ecm1GsTf-1711961056584)]
[外链图片转存中…(img-2P5892uV-1711961056585)]
[外链图片转存中…(img-09FaHjw9-1711961056585)]