例如,我有下面的代码,它可以创建一个包含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));