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

标签 java reactive-programming project-reactor

假设我有一个带有 findAll() 方法的存储库,该方法返回 StateIterable,其中 State 是一个表示美国州的类,它有两个字段(带有 getter/setter):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;

但是,编译器表示总计“应该是最终的或实际上是最终的”。添加 final 显然行不通,因为我正在尝试添加它。

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

最佳答案

使用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
    }

关于java - 如何对 Reactor Flux 流中的值求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49018111/

相关文章:

java - 流编程 : subscriber and publisher to keep track of count?

java - 如何将8位转换为16位?

java - 不同类型的数组声明

java - 在 IntelliJ IDEA 中运行 WebLogic 时类路径和参数错误

apache-kafka - Kafka 上的多线程 在 Spring Reactor Kafka 中发送

java - Java : what is, 中的 Mono 类以及何时使用?

java - 有条件地将 Mono 与 Flux 结合起来

java - 从另一个类调用方法的不同方式

rx-java - 与 rx 的条件查询串联

event-handling - 在单线程应用程序中,EventBus/PubSub 与(响应式(Reactive)扩展)RX 的代码清晰度比较