我想将一个 flux 分成两个 flux,其中第一个包含原始 flux 的第一项,第二个将获取其余项。
在对每个通量应用自定义转换 myLogic
后,我想将它们组合成一个保持原始通量顺序的通量。
例子:
S:学生
S':应用 myLogic
发射通量:s1 -> s2 -> s3 -> s4
第一个 split 通量:s1' => myLogic
第二个拆分通量:s2' -> s3' -> s4' => myLogic
组合通量:s1' -> s2' -> s3' -> s4'
最佳答案
使用标准的 Flux
方法 take
和 skip
来分离头部和尾部元素就足够了。在此之前调用 cache
也有助于避免订阅重复。
class Util {
static <T, V> Flux<V> dualTransform(
Flux<T> originalFlux,
int cutpointIndex,
Function<T, V> transformHead,
Function<T, V> transformTail
) {
var cached = originalFlux.cache();
var head = cached.take(cutpointIndex).map(transformHead);
var tail = cached.skip(cutpointIndex).map(transformTail);
return Flux.concat(head, tail);
}
static void test() {
var sample = Flux.just("a", "b", "c", "d");
var result = dualTransform(
sample,
1,
x -> "{" + x.toUpperCase() + "}",
x -> "(" + x + ")"
);
result.doOnNext(System.out::print).subscribe();
// prints: {A}(b)(c)(d)
}
}
关于java - 将通量拆分为两个通量 - 头和尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58696866/