如何过滤掉空助焊剂
How to filter out empty flux
例如,我有以下代码创建了一个包含 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
})
后续问题
如果在我的代码中我 return Flux.empty()
当数字是 1
会怎么样
.flatMapMany(number -> {
if (number == 1) {
return Flux.empty()
}
return number;
})
.filter(i ->{
// how to filter out Flux.empty() ?
})
filter中如何检测i
是否为空flux并过滤掉
看看这个例子。您可以使用 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));
例如,我有以下代码创建了一个包含 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
})
后续问题
如果在我的代码中我 return Flux.empty()
当数字是 1
.flatMapMany(number -> {
if (number == 1) {
return Flux.empty()
}
return number;
})
.filter(i ->{
// how to filter out Flux.empty() ?
})
filter中如何检测i
是否为空flux并过滤掉
看看这个例子。您可以使用 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));