1 Flux组件
代表的就是一个异步序列,异步序列的三种通知都是适用于该组件,哪三种通知呢:
// 正常的消息通知
onNext()
// 序列出错通知
onComplete()
// 错误通知
onError()
1.1 创建Flux
1.1.1 静态创建
- 静态方法just方法创建
public static void main(String[] args) {
Flux
.just("java", "python", "go")
// 订阅改序列
.subscribe(i-> System.out.println(i.toUpperCase()));
}
- fromIterable,fromArray,fromStream
public static void main(String[] args) {
Flux
.fromArray(new String[]{"java", "python", "go"})
// 订阅序列
.subscribe(i-> System.out.println(i.toUpperCase()));
Flux
.fromIterable(Arrays.asList("java", "python", "go"))
// 订阅序列
.subscribe(i-> System.out.println(i.toUpperCase()));
Flux.fromStream(Stream.of("java", "python", "go"))
// 订阅序列
.subscribe(i-> System.out.println(i.toUpperCase()));
}
-
静态方法:empty(),error(),nerver()
- empty:创建一个不含任何元素只发布结束消息的序列
- error创建一个只包含错误的消息队列
- never:创建一个不含任何消息通知的序列
-
静态方法:range
public static Flux<Integer> range(int start, int count) {
创建一个左闭右开的Integer类型的序列
public static void main(String[] args) {
//0,1,2,3,4,5,6,7,8,9,
Flux.range(0,10).subscribe(integer -> System.out.print(integer + ","));
}
- 静态方法interval
创建一个从0开始递增的Long类型的序列,序列中的元素按照指定的时间间隔来发布
/**
period: 时间间隔
**/
public static Flux<Long> interval(Duration period);
/**
不仅仅指定时间间隔,还指定初始元素发布之前的延迟时间
**/
public static Flux<Long> interval(Duration delay, Duration period)
public static void main(String[] args) {
//0,1,2,3,4,5,6,7,8,9,
// Flux.range(0,10).subscribe(integer -> System.out.print(integer + ","));
Flux.interval(Duration.ofSeconds(1)).subscribe(i-> System.out.println(i));
// 休眠,不要让当前测试进程挂掉
try {
TimeUnit.SECONDS.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
1.1.2 动态创建
- generate
public static void main(String[] args) {
Flux.<String>generate(sink->{
sink.next("java");
sink.complete();
}).subscribe(i ->System.out.println(i.toUpperCase()));
}
public static void main(String[] args) {
Flux<String> generate = Flux.generate(
() -> "java",
(s, sink) -> {
sink.next(s);
sink.complete();
return s;
});
generate.subscribe(i ->System.out.println(i.toUpperCase()));
}
- create:支持产生多个元素
public static void main(String[] args) {
Flux.<String>create(sink->{
sink.next("java");
sink.next("python");
sink.next("go");
sink.complete();
}).subscribe(i->System.out.println(i.toUpperCase()));
}
2 Mono组件
Mono组件中也支持了很多Flux组件的方法,但是还有一些特殊的静态方法。
- delay()
- justOrEmpty()
- delay
用于创建一个Mono序列,特点是,在指定延迟时间之后产生数字0作为唯一值
public static void main(String[] args) throws InterruptedException {
Mono.delay(Duration.ofSeconds(1)).subscribe(System.out::println);
// 休眠一下,为了不上进程停掉
TimeUnit.SECONDS.sleep(4);
}
- justOrEmpty: 从一个Optional中创建Mono
public static void main(String[] args) {
Mono.justOrEmpty(Optional.of("java")).subscribe(System.out::println);
Mono.justOrEmpty(Optional.ofNullable(null)).subscribe(System.out::println);
}