如何对反应堆通量流中的值求和?

假设我有一个存储库,其方法返回一个 of ,其中是一个表示美国状态的类,该状态具有两个字段(带有 getter/setters):和 。findAll()IterableStateStatenamepopulation

我想获取 Flux 中所有 s 的人口字段的总和。我从迭代创建一个 Flux,如下所示:State

Flux f = Flux.fromIterable(stateRepo.findAll());

我有我的Flux,但我不知道有什么好方法来总结它的价值。我尝试过类似的东西

int total = 0;
f.map(s -> s.getPopulation()).subscribe(p -> total += v);
return total;

但是,编译器说总数“应该是最终的或实际上是最终的”。添加显然不起作用,因为我试图添加它。final

如何对 Flux 求和(或任何其他聚合函数)?


答案 1

使用减少方法:

@GetMapping("/populations")
    public Mono<Integer> getPopulation() {
        return Flux.fromIterable(stateRepo.findAll())
                .map(s -> s.getPopulation())
                .reduce(0, (x1, x2) -> x1 + x2)
                .map(this::someFunction); // here you can handle the sum
    }

答案 2

您可以从 maven 导入反应器额外包

io.projectreactor.addons:reactor-extra

然后使用
文档:https://projectreactor.io/docs/core/release/reference/#extra-mathMathFlux.sumInt(integresFlux)


推荐