springboot webflux mono 使用示例(中间操作)
*****************************
flatMap、map、transform:转换操作
class Person{
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Person)) return false;
Person person = (Person) o;
return Objects.equals(getName(), person.getName()) &&
Objects.equals(getAge(), person.getAge());
}
@Override
public int hashCode() {
return Objects.hash(getName(), getAge());
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public class Test7 {
public static void main(String[] args) {
Mono.fromCallable(()->{
Map<String,String> map=new HashMap<>();
map.put("name","瓜田李下");
map.put("age","20");
return map;
}).flatMap(map ->{
Person person=new Person();
person.setName(map.get("name"));
person.setAge(Integer.parseInt(map.get("age")));
return Mono.just(person);
}).subscribe(System.out::println);
Mono.fromCallable(()->{
Map<String,String> map=new HashMap<>();
map.put("name","瓜田李下");
map.put("age","20");
return map;
}).map(map ->{
Person person=new Person();
person.setName(map.get("name"));
person.setAge(Integer.parseInt(map.get("age")));
return person;
}).subscribe(System.out::println);
Mono.fromCallable(()->{
Map<String,String> map=new HashMap<>();
map.put("name","瓜田李下");
map.put("age","20");
return map;
}).transform(mono -> mono.map(map -> {
Person person=new Person();
person.setName(map.get("name"));
person.setAge(Integer.parseInt(map.get("age")));
return person;
})).subscribe(System.out::println);
Mono.fromCallable(()->{
Map<String,String> map=new HashMap<>();
map.put("name","瓜田李下");
map.put("age","20");
return map;
}).transform(mono -> mono.flatMap(map -> {
Person person=new Person();
person.setName(map.get("name"));
person.setAge(Integer.parseInt(map.get("age")));
return Mono.just(person);
})).subscribe(System.out::println);
}
}
***********************
控制台输出
Person{name='瓜田李下', age=20}
Person{name='瓜田李下', age=20}
Person{name='瓜田李下', age=20}
Person{name='瓜田李下', age=20}
*****************************
filter :过滤操作
public class Test8 {
public static void main(String[] args){
Mono.just(2).filter(integer -> integer>1).subscribe(System.out::println);
System.out.println("\n***************");
Mono.just(2).filter(integer -> integer>2).subscribe(System.out::println);
}
}
***********************
控制台输出
2
***************
操作2的内容被过滤掉,无输出
*****************************
do 操作
public class Test9 {
public static void main(String[] args) throws Exception{
Mono.just("hello world")
.doOnNext(s->System.out.println("next"))
.doFinally(s -> System.out.println("finally"))
.doAfterTerminate(() -> System.out.println("terminate"))
.subscribe(System.out::println);
}
}
***********************
控制台输出
next
hello world
terminate
finally
*****************************
log 操作
public class Test10 {
public static void main(String[] args) {
Mono.just("hello world").subscribe(System.out::println);
System.out.println("\n*************");
Mono.just("hello world 2").log().subscribe(System.out::println);
}
}
***********************
控制台输出
hello world
*************
17:56:07.063 [main] INFO reactor.Mono.Just.1 - | onSubscribe([Synchronous Fuseable] Operators.ScalarSubscription)
17:56:07.067 [main] INFO reactor.Mono.Just.1 - | request(unbounded)
17:56:07.068 [main] INFO reactor.Mono.Just.1 - | onNext(hello world 2)
hello world 2
17:56:07.070 [main] INFO reactor.Mono.Just.1 - | onComplete()