Android RxJava加入列表 [英] Android RxJava joining lists
问题描述
试图了解所有RxJava的东西.我在做下面的例子:
Trying to understand all that RxJava stuff. I was doing following example:
private Observable<List<String>> query1() {
List<String> urls = new ArrayList<>();
urls.add("1");
urls.add("2");
urls.add("3");
urls.add("4");
return Observable.just(urls);
}
private Observable<List<String>> query2() {
List<String> urls = new ArrayList<>();
urls.add("A");
urls.add("B");
urls.add("C");
urls.add("D");
return Observable.just(urls);
}
,然后尝试加入两个列表:
and then tried to join two lists:
Observable.zip(
query1(),
query2(),
new Func2<List<String>, List<String>, Observable<String>>() {
@Override
public Observable<String> call(List<String> a1, List<String> a2) {
List<String> list = new ArrayList<>();
list.addAll(a1);
list.addAll(a2);
return Observable.from(list);
}
})
.subscribe(new Action1<String>() { // <-- It says, cannot resolve method subscribe
@Override
public void call(String string) {
String text = testTextView.getText().toString();
testTextView.setText(text + "\n" + string);
}
});
我做错了什么?我期待着进入我的视野1个2个34一个乙CD
What I'm doing wrong? I was expecting to get in my view 1 2 3 4 A B C D
EDIT1 我以以下答案结束了:
EDIT1 I ended with the following answer:
Observable.zip(
query1(),
query2(),
new Func2<List<String>, List<String>, List<String>>() {
@Override
public List<String> call(List<String> a1, List<String> a2) {
List<String> list = new ArrayList<>();
list.addAll(a1);
list.addAll(a2);
return list;
}
})
.flatMap(new Func1<List<String>, Observable<String>>() {
@Override
public Observable<String> call(List<String> urls) {
return Observable.from(urls);
}
})
.subscribe(new Action1<String>() {
@Override
public void call(String string) {
String text = testTextView.getText().toString();
testTextView.setText(text + "\n" + string);
}
});
在这种情况下,ihuk建议的
EDIT2 concat
解决方案会更好.感谢所有答案.
EDIT2 concat
solution as suggested by ihuk would be much better in this case. Appreciate for all the answers.
推荐答案
我相信您要查找的运算符是 concat
或 merge
.
I believe the operators you are looking for are concat
or merge
.
Concat
将从两个或多个 Observable
的发出的发射,而无需对其进行交错.
Concat
will emit the emissions from two or more Observable
s without interleaving them.
合并
将通过合并它们的发射来合并多个可观察对象.
Merge
on the other hand will combine multiple observables by merging their emissions.
例如:
String[] numbers = {"1", "2", "3", "4"};
String[] letters = {"a", "b", "c", "d"};
Observable<String> query1 = Observable.from(numbers).delay(1, TimeUnit.SECONDS);
Observable<String> query2 = Observable.from(letters);
Observable
.concat(query1, query2)
.subscribe(s -> {
System.out.printf("-%s-" + s);
});
将打印 -1--2--3--4--a--b--c--d-
.如果将 concat
替换为 merge
,结果将为 -a--b--c--d--1--2--3--4-
.
Will print -1--2--3--4--a--b--c--d-
. If you replace concat
with merge
the result will be -a--b--c--d--1--2--3--4-
.
Zip
运算符将通过指定的函数将多个 Observable
组合在一起.例如
Zip
operator will combine multiple Observable
s together via specified function. For example
Observable
.zip(query1, query2, (String n, String l) -> String.format("(%s, %s)", n, l))
.subscribe(s -> {
System.out.printf("-%s-", s);
});
将输出-(1,a)-(2,b)-(3,c)-(4,d)-
.
这篇关于Android RxJava加入列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!