如何有效地将已排序的通量分组到 Spring 中的序列化组?

How to efficiently group a sorted flux into serialized groups in Spring?

假设我有一个输入 Flux 包含许多(数十亿个字符串),如下所示:

有数十亿个这样的字符串,它们无法放入内存,这就是我想使用反应式方法的原因。

流已排序。现在我想要的是通过前 3 个字符创建一系列有序的字符串组:

Flux 以 HTTP 响应结束,这意味着所有“app”项目必须在“bib”项目开始之前输出。

在不使用 Flux 的情况下,我可以使用有序的 属性 并将项目收集到准备好的桶中(每个桶的字符串数量将适合内存) - 只要前缀发生变化,我将冲洗桶并开始收集新的前缀。流排序的一大好处就是我知道一旦遇到新的前缀,旧的就再也不会来了。

但是使用 Flux 我不知道该怎么做。 .groupBy() 将 return Flux of Flux 但我认为这在尝试将其序列化为 HTTP 响应输出流时不会起作用。

这几乎是 windowUntilChanged() 的教科书用例。

在你的例子中,你想要提取的“关键”是字符串的前 3 个字母,所以你可以做类似 flux.windowUntilChanged(str -> str.substring(0,3)) 的事情,这会给你一个 Flux<Flux<String>>,其中内部通量在字符串中的前 3 个字母发生变化时开始和结束。当然,您可能想添加一些额外的逻辑来处理长度少于 3 个字符的单词,但我将把它留作 reader :-)

的练习

(我知道你在问题中提到了它,但只是为了澄清和其他人找到这个答案的缘故 - 这将 只有 如果传入元素流已经按字母顺序排序。)