springboot webflux mono 使用示例(创建操作)
**************************
just、defer
public class Test {
public static void main(String[] args) throws Exception{
Mono.defer(() -> Mono.just("hello world "+System.currentTimeMillis()))
.delaySubscription(Duration.ofSeconds(2))
.subscribe(s -> {
System.out.println(s);
System.out.println(System.currentTimeMillis());
});
Mono.just("hello world 2 "+System.currentTimeMillis())
.delaySubscription(Duration.ofSeconds(2))
.subscribe(s -> {
System.out.println(s);
System.out.println(System.currentTimeMillis());
});
TimeUnit.SECONDS.sleep(6);
}
}
*********************
控制台输出
hello world 1593161698708
1593161698721
hello world 2 1593161696692
1593161698722
defer操作时间秒数相同,just操作秒数相差2秒
**************************
sequenceEqual:比较对象流是否相等
public class Test2 {
public static void main(String[] args){
Mono.sequenceEqual(Mono.just("hello world"),Mono.just("hello world"))
.subscribe(System.out::println);
Mono.sequenceEqual(Mono.just(2),Mono.just(3)).subscribe(System.out::println);
}
}
*********************
控制台输出
true
false
**************************
fromRunnable、fromCallable
public class Test3 {
public static void main(String[] args) {
Mono.fromRunnable(() -> System.out.println("hello world")).subscribe();
Mono.fromCallable(() -> 2).subscribe(System.out::println);
}
}
*********************
控制台输出
hello world
2
**************************
using 操作
public class Test4 {
public static void main(String[] args){
Mono.using(()->2,
integer->Mono.just(integer+1),
integer->System.out.println("cleanup "+integer),
false)
.subscribe(System.out::println);
System.out.println("\n***************");
Mono.using(()->10,
integer->Mono.just(integer+1),
integer->System.out.println("cleanup "+integer),
true)
.subscribe(System.out::println);
System.out.println("\n***************");
Mono.using(() -> 20,
integer -> Mono.just(integer+1),
integer -> System.out.println("cleanup "+integer))
.subscribe(System.out::println);
}
}
*********************
控制台输出
3
cleanup 2
***************
cleanup 10
11
***************
cleanup 20
21
**************************
when 操作
public class Test5 {
public static void main(String[] args){
Mono.when(subscriber -> subscriber.onSubscribe(new Subscription() {
@Override
public void request(long l) {
System.out.println("request:"+l);
}
@Override
public void cancel() {
System.out.println("cancel");
}
})).subscribe(System.out::println);
}
}
*********************
控制台输出
request:9223372036854775807
**************************
zip 操作
public class Test6 {
public static void main(String[] args){
Mono.zip(Mono.just(2),Mono.just("Hello world")).subscribe(tuple -> tuple.iterator().forEachRemaining(System.out::println));
System.out.println("\n****************");
Mono.zip(Mono.just(2),Mono.just("hello world"),(value1,value2)-> value2+" "+value1)
.subscribe(System.out::println);
}
}
*********************
控制台输出
2
Hello world
****************
hello world 2