Java WebFlux/反应器-过滤a通量<;列表<;字符串>&燃气轮机;仅在Mono中找到的项目<;设置<;字符串>&燃气轮机;
我是WebFlux/Reactor的新手,很难理解如何编写这段代码。基本上,我有一个Flux,它有一个嵌套的列表foo和一个monobar,我只想返回foo中包含在bar中的项Java WebFlux/反应器-过滤a通量<;列表<;字符串>&燃气轮机;仅在Mono中找到的项目<;设置<;字符串>&燃气轮机;,java,spring-webflux,Java,Spring Webflux,我是WebFlux/Reactor的新手,很难理解如何编写这段代码。基本上,我有一个Flux,它有一个嵌套的列表foo和一个monobar,我只想返回foo中包含在bar中的项 // these two lines are representations of what the data looks like Flux<CategoryModel> foo = { Permissions = [ "UserRole1"] } // List<String&g
// these two lines are representations of what the data looks like
Flux<CategoryModel> foo = { Permissions = [ "UserRole1"] } // List<String>
Mono<Set<String>> bar = [ "UserRole1", "UserRole2" ];
var filteredFoo = foo.filter(m -> m.getPermissions().stream().anyMatch(perm -> bar.block().contains(foo)));
//这两行表示数据的外观
Flux foo={Permissions=[“UserRole1”]}//List
单杠=[“UserRole1”,“UserRole2”];
var filteredFoo=foo.filter(m->m.getPermissions().stream().anyMatch(perm->bar.block().contains(foo));
上述代码块的问题是
包含()
上的.block()
,我不想阻止。不确定如何将其更改为非阻塞,但仍要检查条形图是否包含烫发项目。若要直接回答问题,请不要使用filter()
,请使用filterWhen()
,它根据发布者而不是设置值进行过滤:
foo.filterWhen(m -> bar.map(set -> m.getPermissions().stream().anyMatch(perm -> set.contains(foo))));
请注意,您编写的代码有点奇怪,但我只是直接翻译了它-但由于以下几个原因,目前它没有多大意义:
- 您正在通过权限进行流式传输,但目前没有实际使用
lambda中的权限-因此当前您的代码可以简化为:anyMatch()
foo.filterWhen(m -> bar.map(set -> set.contains(foo)));
- 即使考虑到上述情况,您也在检查集合是否包含通量本身的
,因此在任何合理的情况下都不会出现这种情况foo
filter()
,请使用filterWhen()
,它根据发布者而不是设定值进行筛选:
foo.filterWhen(m -> bar.map(set -> m.getPermissions().stream().anyMatch(perm -> set.contains(foo))));
请注意,您编写的代码有点奇怪,但我只是直接翻译了它-但由于以下几个原因,目前它没有多大意义:
- 您正在通过权限进行流式传输,但目前没有实际使用
lambda中的权限-因此当前您的代码可以简化为:anyMatch()
foo.filterWhen(m -> bar.map(set -> set.contains(foo)));
- 即使考虑到上述情况,您也在检查集合是否包含通量本身的
,因此在任何合理的情况下都不会出现这种情况foo
var filteredFoo=bar.flatMapMany(b->foo.filter(f->f.getPermissions().stream().anyMatch(b::contains));
您需要知道mono的最终内容,以便过滤流量,所以只需等待:
var filteredFoo=bar.flatMapMany(b->foo.filter(f->f.getPermissions().stream().anyMatch(b::contains));
谢谢Michael,这个解决方案奏效了,我的代码有点不同,所以我理解您在最后一点中关于检查集合是否直接包含foo的意思。感谢您在这方面的及时帮助,真的需要更舒适地使用webflux。@MannfromReno无需担心,很乐意提供帮助。Webflux/Responsive是一种不同的东西——它确实需要一些时间来适应和一种完全不同的编程风格,所以如果你在开始时错过了这样的东西,当然不要感到难过!谢谢Michael,这个解决方案成功了,我的代码有点不同,所以我理解您在最后一点中关于检查集合是否直接包含foo的意思。感谢您在这方面的及时帮助,真的需要更舒适地使用webflux。@MannfromReno无需担心,很乐意提供帮助。Webflux/Responsive是一种不同的东西——它确实需要一些时间来适应和一种完全不同的编程风格,所以如果你在开始时错过了这样的东西,当然不要感到难过!谢谢你的回答,我也来试试。谢谢你的回答,我也来试试。