繁体   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