[英]Collecting GroupFlux into a Hashmap by the keys
我最近開始使用Project Reactor,並且提出了一個似乎無法弄清的方案。
基本上,我想對某個流進行分組,然后獲取哈希圖,例如grouping key -> List of grouped values
。 我一直在使用API,但是我獲得的最遠的要么是獲取值,鍵,計數,要么不是我想要的數據結構。 例如,這將是獲得值的代碼:
var elements = new ArrayList<Integer>();
Flux.just(-1, -2, -3, 1, 2, 3)
.groupBy(val -> val.compareTo(0))
.flatMap(Flux::collectList)
.subscribe(elements::addAll);
我想通過的測試如下:
@Test
public void groupBy() {
var elements = new HashMap<Integer, List<Integer>>();
Flux.just(-1, -2, -3, 1, 2, 3)
.groupBy(val -> val.compareTo(0))
// Do something here ...
.subscribe(...);
assertThat(elements).containsKeys(-1, 1);
assertThat(elements.get(-1)).containsExactly(-1, -2, -3);
assertThat(elements.get(1)).containsExactly(1, 2, 3);
}
我如何實現后者?
您是否考慮過使用Flux#connect ? 它接受Collector
,與Stream
使用的類型相同。 還有Flux#collectMap
。
另外,如果您需要流式傳輸此類地圖,則可以使用Flux#scan 。
當您需要按鍵“路由”信號並按鍵獲取Flux
時, groupBy
會很有幫助,但它並非設計用於創建數據集合。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.