Reactor – How to convert Flux into List, Map

Reactor – How to convert Flux into List, Map

Tutorial: “Flux to List – How to convert Reactor Flux to List/Map”

What is a Reactor Flux? A Flux is a Reactive Streams Publisher , augmented with a lot of operators that can be used to generate, transform, orchestrate Flux sequences. It can emit 0 to n elements ( onNext event) then either completes or errors ( onComplete and onError terminal events).
In this tutorial, I introduces ways to convert Reactor Flux into List/Map.

Related post:

Reactor – Handle Error
Reactor – How to Create Flux (Publisher) with Interval

I. Ways to convert Flux to List, Map

We will use Flux methods such as:
collectList(): accumulate sequence into a Mono<List>.
-> Collect all elements emitted by this Flux into a List that is emitted by the resulting Mono when this sequence completes.

collectSortedList(): accumulate sequence and sort into a Mono<List>.
-> Collect all elements emitted by this Flux until this sequence completes, and then sort them in natural order into a List that is emitted by the resulting Mono.

collectMap(): convert sequence into a Mono<Map>.
-> Collect all elements emitted by this Flux into a hashed Map that is emitted by the resulting Mono when this sequence completes. The key is extracted from each element by applying the keyExtractor Function. In case several elements map to the same key, the associated value will be the most recently emitted element.

collectMultimap(): convert sequence into a Mono<Map> that each Map’s key can be paired with multi-value (in a Collection).
-> Collect all elements emitted by this Flux into a multimap that is emitted by the resulting Mono when this sequence completes. The key is extracted from each element by applying the keyExtractor Function, and every element mapping to the same key is stored in the List associated to said key.

Then the Mono result above will be converted into a real List, Map using block() method.

Initialization Reactor Flux

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>

Declare & Initialize Reactor Flux


Flux<String> flux = Flux.just(
						"Site_0:loizenai.com", 
						"Description_0:Java Technology",
						"Description_1:Spring Framework");

Convert Flux to List

Flux collectList() method


List<String> list1 = flux.collectList().block();
list1.forEach(System.out::println);

// Site_0:loizenai.com
// Description_0:Java Technology
// Description_1:Spring Framework

Reactor Flux collectSortedList() method


List<String> list2 = flux.collectSortedList().block();
list2.forEach(System.out::println);

// Description_0:Java Technology
// Description_1:Spring Framework
// Site_0:loizenai.com

Convert Flux to Map

Flux collectMap method


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 -> loizenai.com
// Description_1 -> Spring Framework
// Description_0 -> Java Technology

Flux collectMultimap() method


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 -> [loizenai.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 – Reactor Flux to List


package com.loizenai.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:loizenai.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:loizenai.com
Description_0:Java Technology
Description_1:Spring Framework
=== flux.collectSortedList() ===
Description_0:Java Technology
Description_1:Spring Framework
Site_0:loizenai.com
=== flux.collectMap() ===
Site_0 -> loizenai.com
Description_1 -> Spring Framework
Description_0 -> Java Technology
=== flux.collectMultimap() ===
Site -> [loizenai.com]
Description -> [Java Technology, Spring Framework]

Further Reading – Reactor Programming

Flux Reator

40 thoughts on “Reactor – How to convert Flux into List, Map”

  1. 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

    1. 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)

  2. Thanks a bunch for sharing this with all of us you really understand what you’re speaking about! Bookmarked. Kindly additionally seek advice from my web site =). We will have a hyperlink trade arrangement among us!

  3. After study a couple of of the blog posts in your website now, and I actually like your method of blogging. I bookmarked it to my bookmark website record and might be checking back soon. Pls take a look at my web site as well and let me know what you think.

  4. This design is incredible! You most certainly know how to keep a reader amused. Between your wit and your videos, I was almost moved to start my own blog (well, almost…HaHa!) Great job. I really loved what you had to say, and more than that, how you presented it. Too cool!

  5. I really like your blog.. very nice colors & theme. Did you create this website yourself or did you hire someone to do it for you? Plz reply as I’m looking to create my own blog and would like to find out where u got this from. cheers

  6. Good article. It is extremely unfortunate that over the last one decade, the travel industry has had to handle terrorism, SARS, tsunamis, bird flu, swine flu, and the first ever entire global economic downturn. Through all this the industry has proven to be effective, resilient plus dynamic, getting new methods to deal with trouble. There are constantly fresh complications and opportunity to which the field must again adapt and act in response.

  7. Thanks for revealing your ideas here. The other matter is that whenever a problem occurs with a computer system motherboard, people should not have some risk involving repairing that themselves because if it is not done properly it can lead to irreparable damage to the complete laptop. In most cases, it is safe to approach the dealer of a laptop with the repair of motherboard. They have technicians who have an competence in dealing with pc motherboard issues and can have the right analysis and accomplish repairs.

  8. I was wondering if anyone knows what happened to Dime Piece LA celebrity streetwear brand? I am unable to check out on Dimepiecela site. I’ve read in The Sun that the brand was bought out by a UK hedge fund in excess of $50m. I have just bought the Dimepiece Fire & Desire Makeup Bag from Amazon and absolutely love it xox

  9. An additional problem which on the internet chatting could provide is a self-belief on the person. Because it will be less difficult in order to discuss on the web, an individual that’s incredibly self conscious as well as shy could possibly have trouble using by using exactly who they really is actually. Anybody rather is much like dwelling the two oceans.

  10. Write more, thats all I have to say. Literally, it seems as though you relied on the video to make your point. You definitely know what youre talking about, why throw away your intelligence on just posting videos to your site when you could be giving us something enlightening to read?

  11. Can I recently say thats a relief to locate somebody that really knows what theyre referring to on the internet. You certainly have learned to bring a concern to light to make it essential. The diet really need to look at this and understand why side from the story. I cant believe youre less well-liked since you certainly possess the gift.

  12. oui et surtout non. Ouais car on découvre plus de causes qui citent de semblables cote. Non étant donné que il n’est pas suffisant de répéter ce que tout le monde est capable de trouver sur certains pages étrangers avant de le transposer tellement aisément

  13. Amazing! This blog looks exactly like my old one! It’s on a completely different topic but it has pretty much the same page layout and design. Great choice of colors!

  14. วิธีการเอาชนะ สล็อตออนไลน์ ที่ใครๆก็ทำได้ อย่างที่ทุกๆคนเข้าใจกันดีว่า
    เกมสล็อต นับว่าเป็นเกมที่ชะตากรรม ยอดนิยมอย่างยิ่งในหมู่นักเสี่ยงโชค
    แม้การที่จะทำให้แจ็คพอตแตกจะไม่ได้ง่าย แต่ก็ไม่ได้ยากเหลือเกิน แม้นักเสี่ยงดวงมีแนวทางในการเล่น และก็สามารถควบคุมสติสำหรับการวางเดิมพันได้ตลอด
    เนื่องจากหากทำไม่เห็นผลเสียต่างๆย่อมเกิดขึ้นได้
    การเล่น สล็อตออนไลน์ ที่ดีเป็นจะต้องมีการกำหนดจำนวนเงินในทุกวันอย่างจำกัดกี่ โดยที่เงินส่วนนี้จะต้องไม่มีผลกระทบต่อค่าใช้จ่ายในชีวิตและครอบครัว เว็บ คาสิโนออนไลน์ ที่ควรที่จะเลือกจำต้องน่าไว้ใจมั่นคง สามารถยืนยันการจ่ายเงินของคุณได้อย่างปลอดภัย แล้วก็ลักษณะของเกมที่ควรที่จะทำการเลือกนั้น ควรมีลักษณะตัวช่วยพิเศษ มีฟรีสปิน มีโบนัส แจ็คพอตที่มากกว่าประเภทอื่นๆสิ่งจำเป็นที่สุดเป็นรู้จักเพียงพอและหยุด แปลว่าเมื่อไหร่ที่ได้ควรรู้จักพอ เมื่อไรที่เสียมากๆก็ควรจะหยุดแล้วก็ค่อยกลับมาเดิมพันใหม่ในวันที่เชื่อมั่นในตนเองมากขึ้น
    สล็อตออนไลน์ควรเล่นเวลาไหนถึงจะดีที่สุด
    สำหรับนักเล่นการพนันที่ชอบใจในเกม สล็อตออนไลน์ คงใคร่รู้ใช่ไหมว่าช่วงเวลาดีๆที่สุดที่เงินรางวัลมักออกเสมอๆเนื่องจากว่าเรื่องของเวลารวมทั้งเงินทุนเป็นสิ่งสำคัญอย่างยิ่ง ซึ่งธรรมดาแล้วตอนการออกรางวัลของแต่ละเว็บไซต์นั้นจะไม่เหมือนกัน ดังเช่น บางเว็บจะแจกทุกชั่วโมง บางเว็บไซต์แจกตอนคนเล่นเยอะ ถ้าหากนักเล่นการพนันใครกันแน่เข้าเดิมพันในขณะนั้นพอดิบพอดีก็จะได้รับเงินรางวัลแบบไม่ต้องลุ้นให้เหน็ดเหนื่อย
    สำหรับช่วงเวลาสำหรับการแจกรางวัลของ เกมสล็อต ถือเป็นสิ่งที่นักเล่นการพนันคนไม่ใช่น้อยอยากรู้มากมาย เนื่องด้วยมีนักพนันบางบุคคลที่เล่นมาอย่างยาวนานแต่ยังไม่ได้รับรางวัลแจ็คพอตสักครั้ง
    ด้วยเหตุผลดังกล่าวให้นักเสี่ยงโชคทดลองสังเกตช่วงเวลาหลังเลิกงาน 2-3
    ทุ่ม ช่วงนี้จะมีนักเสี่ยงดวงเข้ามาเล่นไม่น้อยเลยทีเดียวและก็ทาง เว็บไซต์พนันออนไลน์ จะมีการแจกรางวัลโบนัส เพื่อเป็นสิ่งล่อตาล่อใจ ที่จะตอบสนองสิ่งที่มีความต้องการลูกค้าอยู่ตลอด ด้วยเหตุนั้นเดี๋ยวนี้จึงเหมาะสมที่สุดเมื่อคุณได้ทราบขณะสำหรับเพื่อการลุ้นแล้ว ช่องทางสำหรับการทำเงินรางวัลของคุณก็จะเยอะขึ้นเรื่อยๆ

Leave a Reply

Your email address will not be published. Required fields are marked *