繁体   English   中英

如何对 Flux 中的项目进行计数,如果计数大于 X,则返回错误,否则继续流水线

[英]How to Count Items in a Flux, return error if count is greater than X, else continue with Pipeline

我是 Spring 中 Project Reactor 的新手,我不完全确定如何执行某些操作:

我有我的管道,管道返回记录。 都好。

但我想计算这些记录,然后做一些事情(比如 if else),如果返回的记录 > X 则错误,否则继续。

知道 Count 返回Mono<Long> ,然后我会丢失之后的记录,我该怎么办?

我在想:

不知何故使用flatMap并在这个 flatmap 中执行一些操作。 不知何故,我看到 Flux 中有一种reduce方法可能会有所帮助。

关键是,我不确定如何进行。

不完全确定您想要什么,因此将根据假设提供两个建议

1..您想收集所有元素然后评估是否超过n,如果是则抛出错误。 您可以使用 collectList,计算元素,然后在任何情况下转换回通量。 如果总数低于限制,这doStuff在任何元素上执行。

    Flux.range(1,10)
            .collectList()
            .flatMap(s -> 
                s.size()>7 
                    ? Mono.error(new RuntimeException("TOO MANY!")) 
                    : Mono.just(s))
            .flatMapMany(Flux::fromIterable)
            .map(this::doStuff)

2.. 您想动态评估元素的数量,您可以使用外部原子计数器。 这将对每个元素进行doStuff直到有问题的元素。

    AtomicLong count = new AtomicLong();

    Flux.range(1,10)
            .flatMap(s -> 
                count.incrementAndGet() > 7 
                    ? Flux.error(new RuntimeException("TOO MANY!")) 
                    : Flux.just(s))
             .map(this::doStuff);

我也是 Spring 反应器和反应式编程的新手,但我尝试过,这对我返回通量元素编号的 Long 值有用:

fluxObject.count().block().longValue()

在这种情况下,您也可以使用shortValue()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM