假如说:
- 两个集合都不是很大(您可以将它们保存在内存中而不会冒 OOM 问题的风险)
- 它们不是按 id 排序的
- 集合中的每个元素在另一个中都有对应的元素
首先,您应该制作这些Class1,Class2实现Comparable或至少准备一个比较器实现,您可以使用它来按它们的 id 对它们进行排序。
然后您可以使用zip运算符:
Flux<Class1> flux1 = ...
Flux<Class2> flux2 = ...
Flux<Tuple2<Class1,Class2>> zipped = Flux.zip(flux1.sort(comparator1), flux2.sort(comparator2));
Tuple2是一个 Reactor 核心类,可让您像这样访问元组的每个元素
Tuple2<Class1,Class2> tuple = ...
Class1 klass1 = tuple.getT1();
Class2 klass2 = tuple.getT2();
在这种情况下,sort将缓冲所有元素,如果集合很大,这可能会导致内存/延迟问题。根据这些集合中的排序方式(假设不能保证排序,但它们是批量插入的),您还可以缓冲其中的一些(使用window)并在每个窗口上进行排序(使用sort)。
当然,理想情况下,能够同时获取已排序的数据将避免缓冲数据并改善应用程序中的背压支持。