簡體   English   中英

通過按鍵將GroupFlux收集到Hashmap中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM