假设我有一个包含findAll()
方法的存储库,该方法返回Iterable
State
,其中State
是表示具有两个字段的美国州的类( getter / setters):name
和population
。
我想得到我的Flux中所有State
s的总体字段。
我从Iterable创建一个Flux,如下所示:
Flux f = Flux.fromIterable(stateRepo.findAll());
我有我的Flux,但我不知道总结其价值的好方法。 我尝试过像
这样的东西int total = 0;
f.map(s -> s.getPopulation()).subscribe(p -> total += v);
return total;
然而,编译器说总的“应该是最终的或有效的最终”。显然添加final
是行不通的,因为我正在尝试添加它。
如何在Flux上进行求和(或任何其他聚合函数)?
答案 0 :(得分:7)
使用 reduce 方法:
@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
}
答案 1 :(得分:3)
您可以从maven
导入reactor额外包 io.projectreactor.addons:reactor-extra
然后使用MathFlux.sumInt(integresFlux)
docs:https://projectreactor.io/docs/core/release/reference/#extra-math