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