In this tutorial, JavaSampleApproach introduces ways to convert Reactor Flux into List/Map.
Contents
I. Ways to convert Flux into Collection
We will use Flux
methods such as:
– collectList()
: accumulate sequence into a Mono<List>
.
– collectSortedList()
: accumulate sequence and sort into a Mono<List>
.
– collectMap()
: convert sequence into a Mono<Map>
.
– collectMultimap()
: convert sequence into a Mono<Map>
that each Map’s key can be paired with multi-value (in a Collection
).
Then the Mono
result above will be converted into a real List/Map using block()
method.
0. Initialization
0.1 Reactor installation in Maven
– First, import the BOM by adding the following to pom.xml:
<dependencyManagement> <dependencies> <dependency> <groupId>io.projectreactor</groupId> <artifactId>reactor-bom</artifactId> <version>Aluminium-SR1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> |
– Next, add dependency:
<dependencies> <dependency> <groupId>io.projectreactor</groupId> <artifactId>reactor-core</artifactId> </dependency> </dependencies> |
0.2 Declare & Initialize Flux
Flux<String> flux = Flux.just( "Site_0:grokonez.com", "Description_0:Java Technology", "Description_1:Spring Framework"); |
1. List
1.1 Flux.collectList
List<String> list1 = flux.collectList().block(); list1.forEach(System.out::println); // Site_0:grokonez.com // Description_0:Java Technology // Description_1:Spring Framework |
1.2 Flux.collectSortedList
List<String> list2 = flux.collectSortedList().block(); list2.forEach(System.out::println); // Description_0:Java Technology // Description_1:Spring Framework // Site_0:grokonez.com |
2. Map
2.1 Flux.collectMap
Map<String, String> map1 = flux .collectMap( item -> {return item.split(":")[0];}, item -> {return item.split(":")[1];}) .block(); map1.forEach((key, value) -> System.out.println(key + " -> " + value)); // Site_0 -> grokonez.com // Description_1 -> Spring Framework // Description_0 -> Java Technology |
2.2 Flux.collectMultimap
Map<String, Collection<String>> map2 = flux .collectMultimap( item -> {return item.split("_[0-9]+:")[0];}, item -> {return item.split(":")[1];}) .block(); map2.forEach((key, value) -> System.out.println(key + " -> " + value)); // Site -> [grokonez.com] // Description -> [Java Technology, Spring Framework] |
II. Source Code
1. Technology
– Java 8
– Maven 3.6.1
– Reactor Core 3.0.4, with the Aluminium release train.
2. Code
package com.javasampleapproach.fluxcollection; import java.util.Collection; import java.util.List; import java.util.Map; import reactor.core.publisher.Flux; public class MainApp { public static void main(String[] args) { Flux<String> flux = Flux.just( "Site_0:grokonez.com", "Description_0:Java Technology", "Description_1:Spring Framework"); System.out.println("=== flux.collectList() ==="); List<String> list1 = flux.collectList().block(); list1.forEach(System.out::println); System.out.println("=== flux.collectSortedList() ==="); List<String> list2 = flux.collectSortedList().block(); list2.forEach(System.out::println); System.out.println("=== flux.collectMap() ==="); Map<String, String> map1 = flux .collectMap( item -> {return item.split(":")[0];}, item -> {return item.split(":")[1];}) .block(); map1.forEach((key, value) -> System.out.println(key + " -> " + value)); System.out.println("=== flux.collectMultimap() ==="); Map<String, Collection<String>> map2 = flux .collectMultimap( item -> {return item.split("_[0-9]+:")[0];}, item -> {return item.split(":")[1];}) .block(); map2.forEach((key, value) -> System.out.println(key + " -> " + value)); } } |
3. Results
=== flux.collectList() === Site_0:grokonez.com Description_0:Java Technology Description_1:Spring Framework === flux.collectSortedList() === Description_0:Java Technology Description_1:Spring Framework Site_0:grokonez.com === flux.collectMap() === Site_0 -> grokonez.com Description_1 -> Spring Framework Description_0 -> Java Technology === flux.collectMultimap() === Site -> [grokonez.com] Description -> [Java Technology, Spring Framework] |
Last updated on December 31, 2020.
I think that not working now because you should get error:
block()/blockFirst()/blockLast() are blocking, which is not supported in thread reactor-http-nio-3
Mono customer=webClient.get().uri(“/{id}”, id).retrieve().bodyToMono(Customer.class);
Customer javaCustomer= customer.block();
While running code -I am also getting block()/blockFirst()/blockLast() are blocking, which is not supported in thread reactor-http-nio-3.
Any Idea how to convert Mono to Java Customer Pojo object ,Any other alternate approach to convert or solution to block() exception ? (Post Date -18Jan2021)