如何获得一个焊剂中没有出现在另一个焊剂中的元素

时间:2019-08-31 03:39:40

标签: spring-webflux reactive

我是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);
                });

还有其他更好的解决方案了,谢谢。

1 个答案:

答案 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

的以下变体

https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Mono.html#zip-reactor.core.publisher.Mono-reactor.core.publisher.Mono-java.util.function.BiFunction-