我有两个应该异步工作的反应性流。因此,我应该调用foo()
函数,它将接受两个参数,并将与来自两个初始反应流的元素的所有可能排列一起调用。如果有任何异常发生在整个过程中,它应该使所有事情都失败。通过使用反应堆核心来实现这一点的最佳方法是什么?
示例:
String[] aInitial = {"a","b","c"};
String[] bInitial = {"0","1"};
Flux<String> fluxA = Flux.fromArray(aInitial);
Flux<String> fluxB = Flux.fromArray(bInitial);
...
private void foo(String a, String b){
System.out.println(a + ", " + b);
}
预期结果(顺序不重要):
a,0 a,1 b,0 b,1 c,0 c,1
发布于 2019-02-06 21:39:36
而不是在执行转换的方法中调用操作(在您的例子中是System.out.println
),而是将其分割成一个函数,它将两个元素组合在一起,另一个函数将数据操作组合在一起。
public static void main(String[] args) {
String[] aInitial = {"a", "b", "c"};
String[] bInitial = {"0", "1"};
Flux<String> fluxA = Flux.fromArray(aInitial);
Flux<String> fluxB = Flux.fromArray(bInitial);
fluxA
.flatMap(input1 -> fluxB.map(input2 -> foo(input1, input2)))
.doOnNext(System.out::println)
.blockLast();
}
private static String foo(String a, String b) {
return a + ", " + b;
}
如您所见,我们遍历第一个通量,并使用第二个通量创建一个嵌套循环。
请注意,这将不适用于热通量,只有冷通量将在这里工作,因为我们需要重新订阅第二个通量的每一个元素从第一个发射。
https://stackoverflow.com/questions/54565433
复制相似问题