springboot webflux flux 使用示例(轉換操作)
**********************
flatMap、map、transform、switchMap
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 Test {
public static void main(String[] args){
Map<String,String> map=new HashMap<>();
map.put("name","瓜田李下");
map.put("age","20");
Flux.just(map).flatMap(m -> {
String name=m.get("name");
Integer age=Integer.parseInt(m.get("age"));
Person person=new Person();
person.setName(name);
person.setAge(age);
return Flux.just(person);
}).subscribe(System.out::println);
Flux.just(map).map(m -> {
String name=m.get("name");
Integer age=Integer.parseInt(m.get("age"));
Person person=new Person();
person.setName(name);
person.setAge(age);
return person;
}).subscribe(System.out::println);
Flux.just(map).transform(flux -> flux.flatMap(m -> {
String name=m.get("name");
Integer age=Integer.parseInt(m.get("age"));
Person person=new Person();
person.setName(name);
person.setAge(age);
return Flux.just(person);
})).subscribe(System.out::println);
Flux.just(map).transform(flux -> flux.map(m -> {
String name=m.get("name");
Integer age=Integer.parseInt(m.get("age"));
Person person=new Person();
person.setName(name);
person.setAge(age);
return person;
})).subscribe(System.out::println);
Flux.just(map).switchMap(m -> {
String name=m.get("name");
Integer age=Integer.parseInt(m.get("age"));
Person person=new Person();
person.setName(name);
person.setAge(age);
return Flux.just(person);
}).subscribe(System.out::println);
}
}
******************
控制檯輸出
Person{name='瓜田李下', age=20}
Person{name='瓜田李下', age=20}
Person{name='瓜田李下', age=20}
Person{name='瓜田李下', age=20}
Person{name='瓜田李下', age=20}
**********************
toIterable、toStream
public class Test2 {
public static void main(String[] args){
Flux.just("瓜田李下","瓜田李下 2","瓜田李下 3","瓜田李下 4","瓜田李下 5","瓜田李下 6")
.toIterable().forEach(System.out::println);
Flux.just("1 ","2 ","3 ","4 ","5 ","6 ").toStream().forEach(System.out::print);
System.out.println("\n\n************");
String s=Flux.just("瓜田李下","瓜田李下 2").elementAt(0)
.flux().toIterable().iterator().next();
System.out.println("flux 第0個元素爲:"+s);
String s2=Flux.just("hello world","hello world 2","hello world 3").last()
.flux().toIterable().iterator().next();
System.out.println("flux 最後一個元素爲:"+s2);
}
}
******************
控制檯輸出
瓜田李下
瓜田李下 2
瓜田李下 3
瓜田李下 4
瓜田李下 5
瓜田李下 6
1 2 3 4 5 6
************
flux 第0個元素爲:瓜田李下
flux 最後一個元素爲:hello world 3
**********************
collect
public class Test3 {
public static void main(String[] args){
Flux.just(2,34,56,75,4,56).collectList()
.subscribe(list -> list.forEach(value -> System.out.print(value+" ")));
System.out.println();
Flux.just(2,34,56,75,4,56).collectSortedList()
.subscribe(list -> list.forEach(value -> System.out.print(value+" ")));
System.out.println("\n\n****************");
Flux.just("1 瓜田李下","2 瓜田李下2","3 瓜田李下3").collectMap(
value -> {
String[] s= value.split(" ");
return s[0];
},
value -> {
String[] s= value.split(" ");
return s[1];
}
).subscribe(map -> map.forEach((key, value1) -> System.out.println(key + " " + value1)));
System.out.println("\n****************");
Flux.just("1 瓜田李下 瓜田李下2 瓜田李下3 瓜田李下4 瓜田李下5 瓜田李下6",
"2 hello hello2 hello3 hello4 hello5 hello6")
.collectMultimap(
value -> {
String[] s=value.split(" ");
return s[0];
},
value -> {
String[] s=value.split(" ");
List<String> list=new ArrayList<>();
if (s.length>1) {
list.addAll(Arrays.asList(s).subList(1, s.length));
}
return list;
}).subscribe(map -> map.forEach((key,value) -> System.out.println(key+" "+value)));
}
}
******************
控制檯輸出
2 34 56 75 4 56
2 4 34 56 56 75
****************
1 瓜田李下
2 瓜田李下2
3 瓜田李下3
****************
1 [[瓜田李下, 瓜田李下2, 瓜田李下3, 瓜田李下4, 瓜田李下5, 瓜田李下6]]
2 [[hello, hello2, hello3, hello4, hello5, hello6]]