如何对 Reactor Flux 流中的值求和?

How do I sum the values in a Reactor Flux stream?

假设我有一个带有 findAll() 方法的存储库,其中 returns 是 StateIterable,其中 State 是 class表示具有两个字段(getter/setters)的美国州:namepopulation

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

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

我有 Flux,但我不知道总结其值的好方法。 我尝试过

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

但是,编译器说总计 "should be final or effectively final"。添加 final 显然行不通,因为我正在尝试添加它。

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

使用减少方法:

@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
    }

你可以从 maven 导入 reactor extra 包

io.projectreactor.addons:reactor-extra

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