首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何筛选出不包含Flux<String>值的Flux<String>

如何筛选出不包含Flux<String>值的Flux<String>
EN

Stack Overflow用户
提问于 2019-08-06 13:18:08
回答 2查看 983关注 0票数 1

假设我有一个包含Flux<String> firstLetters"A", "B", "C", "D"和包含"X", "Y", "Z"Flux<String> lastLetters

我有一个通量包含了很多:

代码语言:javascript
运行
复制
data class Example(val name: String)

从整个Flux<Example>中,我想将元素拆分为两个变量:一个Flux<Example>包含所有的name IN ("A", "B", "C", "D"),第二个Flux<Example>有名称IN ("X", "Y", "Z"),并保存这两个流量两个变量。

是否可以在一个流程中这样做,而不首先对firstLetters执行相同的逻辑,然后对lastLetters执行相同的逻辑操作?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-07 10:25:52

是否可以在一个流程中这样做,而不首先对firstLetters执行相同的逻辑,然后对lastLetters执行相同的逻辑操作?

由于问题所在,我不认为是这样的,因为您必须多次处理每个元素(列表中每个值一个,以查看它是否包含所需的值)。但是,您可以在cache()上调用Flux,以确保只检索一次值,或者完全转换为另一种数据结构。

考虑到您无论如何都必须重新评估,并且假设您仍然希望坚持使用原始的Flux对象,那么filterWhen()any()在这里可以很好地使用:

代码语言:javascript
运行
复制
Flux<Example> firstNames = names.filterWhen(e -> firstLetters.any(e.name::contains));
Flux<Example> lastNames = names.filterWhen(e -> lastLetters.any(e.name::contains));

当然,如果您关心代码复制,可以将Predicate提取到一个单独的方法中。

票数 1
EN

Stack Overflow用户

发布于 2019-08-06 15:36:51

如果Flux<String> firstLetters/lastLetters可以被Set<String> firstLetters/lastLetters替换,那么您可以很容易地利用Flux<Example>上的Flux::groupBy方法将其分成不同的组。

代码语言:javascript
运行
复制
enum Group {
  FIRST, LAST, UNDEFINED
}

Group toGroup(Example example) {
  if (firstLetters.contains(example.name)) return FIRST;
  else if (lastLetters.contain(example.name)) return LAST;
  else return UNDEFINED;
}

Flux<GroupedFlux<Group, Example>> group(Flux<Example> examples) {
  return examples.groupBy(example -> toGroup(example));
}

然后,您可以通过调用GroupedFlux<K, V>::key来获得这个组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57377007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档