gpt4 book ai didi

java - RxJava : how to use Observable instead nested loops?

转载 作者:行者123 更新时间:2023-12-05 00:19:24 33 4
gpt4 key购买 nike

现在我使用带有 ReplaySubject 的嵌套循环获得多个可观察对象,这需要在不使用任何循环的情况下进行转换,只需要可观察对象。

private Observable<BaseUnit> getUnitObservables(ArrayList<Map<Integer, Integer>> list, ReplaySubject<BaseUnit> subject) {

ArrayList<Observable<BaseUnit>> observables = new ArrayList<>();

for (Map<Integer, Integer> elem : list) {
for (MapOperationName operationName : MapOperationName.values()) { // MapOperationName type is enum

Observable<BaseUnit> observable = Observable.fromCallable(() -> {
// some operations here

subject.onNext(unit);
observables.add(observable);
});
}
}
return Observable.merge(observables);
}
Map<Integer, Integer> elem : list”有 3 个元素。
MapOperationName.values()”返回 7 个元素。
所以我在上面的例子中完全应该是 21 岁。
试图重构这样的东西,但只得到 3 个元素:
private Observable<BaseUnit> getUnitObservables(ArrayList<Map<Integer, Integer>> list, ReplaySubject<BaseUnit> subject) {

Observable<ListOperationName> observableOperation =
Observable.fromArray(MapOperationName.values());
Observable<List<Integer>> observableList = Observable.fromIterable(list);
return Observable.zip(observableList, observableOperation, (listElem, operationElem) -> {

subject.onNext(unit);
//some operations here
});

}
如何正确组合这个 ArrayListEnum获得全套配对组合?

最佳答案

您可以将需要执行的操作嵌套在 flatMap 中。为达到这个:

private Observable<BaseUnit> getUnitObservables(ArrayList<Map<Integer, Integer>> list, ReplaySubject<BaseUnit> subject) {

Observable<ListOperationName> observableOperation =
Observable.fromArray(MapOperationName.values());
Observable<List<Integer>> observableList = Observable.fromIterable(list);
return observableList
.flatMap(listElem -> observableOperation
.map(operationElem -> {
// some operations here
subject.onNext(unit);
return unit; // Assuming unit is a BaseUnit
})
);
}

关于java - RxJava : how to use Observable instead nested loops?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62997465/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com