假设我有一个具有findall()
方法的存储库,该方法返回state
的iterable
,其中state
是一个表示美国状态的类,它有两个字段(带有getter/setters):name
和population
。
我想获得Flux中所有状态
的填充字段之和。我从Iterable创建了一个Flux,如下所示:
Flux f = Flux.fromIterable(stateRepo.findAll());
我有我的通量,但我不知道一个好的方法来总结它的价值。我试过
int total = 0;
f.map(s -> s.getPopulation()).subscribe(p -> total += v);
return total;
然而,编译器说total“应该是最终的或有效的最终的”。添加final
显然不会起作用,因为我正在尝试添加。
我如何对通量进行求和(或任何其他聚合函数)?
使用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
}
使用阻塞运算符,我可以这样做:
我试图实现从阻塞队列创建的Reactor通量,但不确定哪个操作符最适合我的用例? 我正在创建一个流式RESTendpoint,其中的响应是流量,需要不断从阻塞队列中发出消息,作为获取REST调用的响应。 我已经尝试过论坛和留档,只能找到从可迭代集合或响应数据源发起的Flux,但没有任何BlockingQueue的示例。
问题内容: 我想要与此等同的流: 该代码实际上并未编译,因为无法将0分配给T类型,但是您可以理解。 问题答案: 这是另一种方法: (不过,总的来说,保罗的回答是减少装箱和拆箱。) 至于 一般而言 ,我认为没有比这更方便的方法了。 我们可以做这样的事情: 但是你总会过夏天。也是有问题的,因为它返回了。上面的方法为一个空的映射抛出一个异常,但是一个空的和应该为0。当然,我们也可以传递0:
我想要一个流的等价物: 这段代码实际上并不编译,因为0不能分配给类型T,但您明白了。
在Reactor Netty中,当通过向TCP通道发送数据时,任何发布服务器都可以工作。但是,如果不是简单的即时而是使用带有延迟元素的更复杂的flux,那么它就会停止正常工作。例如,如果我们使用这个hello world TCP echo服务器,它将按照预期工作: 但是,如果我们将更改为 那么我们将期望对于每一个接收到的项目,都将产生一个延迟一秒的输出。 但是,服务器的行为方式是,如果它在间隔期间
我有一个通量和单值,我不知道如何组合它们,以便在通量的每一项中都有单值。 我正在尝试这种方法,但它不起作用: