Android RxJava加入列表 [英] Android RxJava joining lists

查看:67
本文介绍了Android RxJava加入列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

试图了解所有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 Observables 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 Observables 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆