我试图在RxJava中找到适合下一个序列操作的操作:
[A],[B],[C] - > Aa,Ab,Ac,Ba,Bb,Bc,Ca,Cb,Cc
实际用例是我有一个Observable,其中包含我试图从列表中转换为Observable发出扁平化项目的项目列表。
像这样:
Observable<List<Item>> ---> Observable<Item>
我似乎无法找到一个合适的RxJava操作来做类似的事情 - 有flatMap()与我想要的完全相反,但没有&#34;生成&#34;或&#34; mapToMany&#34;操作。我错过了什么?
答案 0 :(得分:2)
flatMap()听起来像你在寻找:
// This assumes that generating originalObservable is not under your control
// and is returned from some other API call you are making.
List<Item> originalList = Arrays.asList(new Item(), new Item(), new Item());
Observable<List<Item>> originalObservable = Observable.just(originalList);
Observable<Item> itemObservable =
originalObservable
.flatMap(new Func1<List<Item>, Observable<Item>>() {
@Override
public Observable<Item> call(List<Item> items) {
return Observable.from(items);
}
});
如果你实际上有权访问originalList(而不是来自其他API调用的originalObservable),你可以使用from()从中创建一个Observable:
Observable<Item> itemObservable = Observable.from(originalList);
我不确定这与你的原始序列([A],[B],[C] - &gt; Aa,Ab,Ac,Ba,Bb,Bc,Ca,Cb,Cc)有什么关系,因为我我不确定小a,b和c来自哪里。如果它们是不需要大写A,B和C来生成它们的独立值,那么flatMap()就是你想要的。
Observable<String> result =
Observable
.just("A", "B", "C")
.flatMap(new Func1<String, Observable<String>>() {
@Override
public Observable<String> call(String s) {
return Observable
.just(s + "a", s + "b", s + "c");
}
});