我是Spring Reactive Project的新手。使用中存在问题。 我有两个助焊剂,一个有更多元素,例如
Flux<Integer> bigFlux = Flux.range(1, 10);
另一个喜欢
Flux<Integer> smallFlux = Flux.just(3, 7);
如何获取bigFlux中未出现在smallFlux中的元素? 我不知道要使用哪个运算符。
我尝试过:
Flux<Integer> flux = bigFlux.filterWhen(one -> smallFlux.hasElement(one).map(a->!a));
但这不是明智的选择,我通过复杂的操作(例如查询数据库,flatMap操作)获得了smallFlux。这样,bigFlux中有多少个元素,这些操作将重复多少次。
事实上,smallFlux是通过这种方式获得的。
Flux<File> usedFile = repository.findAll()
.flatMap(one -> {
List<File> used = someMethods(one);
return Flux.fromIterable(used);
});
还有其他更好的解决方案了,谢谢。
答案 0 :(得分:0)
我认为这将是一个更干净,更快捷的解决方案
final Flux<Integer> bigListFlux = Flux.just(1, 2, 3);
final Flux<Integer> smallListFlux = Flux.just(3, 5, 6);
Mono.zip(bigListFlux.collectList(), smallListFlux.collectList(), (bigList, smallList) -> {
bigList.removeAll(smallList);
return bigList;
}).flatMapMany(Flux::fromIterable).map(element -> {
System.out.println("element = " + element);
return element;
}).subscribe(); // do not use subscribe/block in actual production code.
我使用了Mono.zip