如何过滤空通量

例如,我有下面的代码,它可以创建一个包含3个数字的Mono列表 1,2,3. 我想过滤掉那些 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
})

一个后续问题

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

.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 这是一个结合了映射和过滤的方法。

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));

给TA打赏
共{{data.count}}人
人已打赏
未分类

状态更新后UI不反应不重新渲染

2022-9-8 11:44:42

未分类

异步返回解析后的JSON数组。

2022-9-8 11:55:35

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索