如何对 Reactor Flux 流中的值求和?
How do I sum the values in a Reactor Flux stream?
假设我有一个带有 findAll()
方法的存储库,其中 returns 是 State
的 Iterable
,其中 State
是 class表示具有两个字段(getter/setters)的美国州:name
和 population
。
我想获取我的 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
假设我有一个带有 findAll()
方法的存储库,其中 returns 是 State
的 Iterable
,其中 State
是 class表示具有两个字段(getter/setters)的美国州:name
和 population
。
我想获取我的 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