因此,假设我有一个包含var doo = new Date("2011-09-24 EST");
的{{1}}和一个包含Flux<String> firstLetters
的{{1}}
我的助焊剂中含有很多:
"A", "B", "C", "D"
从整个Flux<String> lastLetters
中,我想将元素拆分为两个变量:一个包含所有"X", "Y", "Z"
的{{1}}和另一个名为{{1}的data class Example(val name: String)
},并保存这两个磁通量两个变量。
是否可以一次执行一个流程而无需先对Flux<Example>
然后对Flux<Example>
做相同的逻辑
答案 0 :(得分:1)
是否可以在一次流程中这样做,而无需先对firstLetters然后对lastLetters做相同的逻辑
从问题的角度来看,我不这么认为,因为您必须多次处理每个元素(列表中的每个值一个,以查看其是否包含所需的值。)您可以调用{{1 }}放在cache()
上,以确保这些值仅被检索一次,或完全转换为另一个数据结构。
考虑到您仍然必须重新评估,并假设仍然要使用原始的Flux
对象,可以在这里很好地使用Flux
和filterWhen()
:
any()
如果您担心那里的代码重复,您当然可以将Flux<Example> firstNames = names.filterWhen(e -> firstLetters.any(e.name::contains));
Flux<Example> lastNames = names.filterWhen(e -> lastLetters.any(e.name::contains));
拉出到单独的方法中。
答案 1 :(得分:0)
如果可以将Flux<String> firstLetters/lastLetters
替换为Set<String> firstLetters/lastLetters
,则可以轻松地在Flux::groupBy
上利用Flux<Example>
方法将其分成不同的组。
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
来获得组。