假设您具有以下结构的对象流:
class Element {
String key;
int count;
}
现在想象一下那些元素按预定义的排序顺序流动,总是按键组,例如
{ key = "firstKey", count=123}
{ key = "firstKey", count=1 }
{ key = "secondKey", count=4 }
{ key = "thirdKey", count=98 }
{ key = "thirdKey", count=5 }
.....
我想做的是创建一个通量,该通量为每个不同的key
返回一个元素,并为每个键组求和count
。
因此,基本上就像每个组的经典归约法一样,但是使用reduce
运算符是行不通的,因为它只返回一个元素,并且我想为每个不同的键获取一个元素的通量。
使用bufferUntil
可能有效,但有一个缺点,就是我必须保持状态以检查key
与以前的版本相比是否已更改。
使用groupBy
是一个过大的杀伤力,因为我知道一旦找到新密钥,每个组都将结束,所以我不想在该事件之后保留任何内容。
是否可以使用Flux
进行聚合而不将状态保持在流程之外?
答案 0 :(得分:2)
当前(从3.2.5版本开始)如果不自己跟踪状态,是不可能的。 UserDetails @OneToOne
可以使票据符合最小状态,但不会发出状态,只是根据该状态将其视为“不同”的值。
解决这个问题的最简单方法是使用distinctUntilChanged
和windowUntil
+每个用户状态的compose
:
AtomicReference