project-reactor - 如何过滤掉空通量

标签 project-reactor reactive reactor

例如,我有以下代码,它创建一个包含 3 个数字 1,2,3 列表的 Mono。我想过滤掉数字1。结果将是一个由 2 个数字 2,3 组成的列表。我应该在 flatMapMany 中做什么才能跳过数字 1

Mono.just(new LinkedList<>{{
    add(1);
    add(2);
    add(3);
}})
.flatMapMany(number -> {
  if (number == 1) {
    // not return 
  }

  return number;
})
.collectList()
.map(numbers -> {
  // numbers should be 2,3
})

后续问题

如果在我的代码中当数字为 1 时返回 Flux.empty() 会怎样

.flatMapMany(number -> {
  if (number == 1) {
    return Flux.empty() 
  }

  return number;
})
 .filter(i ->{
  // how to filter out Flux.empty() ?
})

在过滤器中,如何检测i是否为空通量并将其过滤掉

最佳答案

看一下这个例子。您可以使用 flatMapIterable 将单声道列表转换为 Flux。

    Mono.just(List.of(1,2,3))
        .flatMapIterable(Function.identity())    
        .filter(i -> i != 1)
        .collectList()
        .subscribe(s -> System.out.println(s)); //prints [2,3]

对于后续问题。我们需要使用.handle,它是map和filter方法的组合。

Flux.fromIterable(List.of(1, 2, 3))
                .handle((number, sink) -> {
                    if (number != 1) {
                        sink.next(number);
                    }
                })
                .collectList()
                .subscribe(s -> System.out.println(s));

如果您确实想采用您的方法,那么我们需要像这样进行过滤

    Flux.fromIterable(List.of(1, 2, 3))
            .flatMap((number) -> number == 1 ? Flux.empty() : Flux.just(number))
            .collectList()
            .subscribe(s -> System.out.println(s));

关于project-reactor - 如何过滤掉空通量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61398079/

相关文章:

java - Spring react 器: What's the corresponding class to Optional<T>?

python - 使用 Twisted, 'connectionMade' 如何触发特定的 Deferred?

java - 如何等待多个 Flux 和 Mono 发布者同时完成

java - Reactor StepVerifier.withVirtualTime 无限期阻塞

java - Flux 未在 Spring 5 react 器中订阅

java - 通过键将 GroupFlux 收集到 Hashmap 中

R Shiny : Save everything, 中的 react 变量和输入但并非每次都如此

Websockets 与响应式(Reactive)套接字

java - next() 与 Single() 哪个有效?

c++ - 前摄器 VS react 器