java - 将通量拆分为两个通量 - 头和尾

标签 java spring-boot spring-webflux project-reactor

我想将一个 flux 分成两个 flux,其中第一个包含原始 flux 的第一项,第二个将获取其余项。

在对每个通量应用自定义转换 myLogic 后,我想将它们组合成一个保持原始通量顺序的通量。

例子:

S:学生
S':应用 myLogic

后的学生

发射通量:s1 -> s2 -> s3 -> s4
第一个 split 通量:s1' => myLogic
第二个拆分通量:s2' -> s3' -> s4' => myLogic
组合通量:s1' -> s2' -> s3' -> s4'

最佳答案

使用标准的 Flux 方法 takeskip 来分离头部和尾部元素就足够了。在此之前调用 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/

相关文章:

java.util.MissingResourceException : Can't find bundle for base name javax. servlet.LocalStrings,语言环境 es_ES

java - 我们如何通过Jpa获取完整的分层数据列表

java - Spring Security 5.1.5 与 WebFlux 用户禁用不起作用

java - spring webflux 所有 api 都给出 UnsupportedMediaTypeException

java - 将图像从sql数据库插入Jtable

java - 从链接列表中检索特定数据

mysql - Spring Boot with MySQL 立即关闭

postgresql - R2DBC邻接表获取所有 child

java - 在 linux 机器上遇到编码问题,而不是 Windows

spring - 如何在 Spring Boot 中关闭调试日志消息