Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不能合并RXJava2_Java_Observable_Rx Java2 - Fatal编程技术网

不能合并RXJava2

不能合并RXJava2,java,observable,rx-java2,Java,Observable,Rx Java2,嗨,我是新来的RXJava 我试图从包含arraylist的多个Observable中获取用户。我想合并这两个数据并将其发布到Observer 这是我的片段 Observable<Users> baseDataObservable = mService.getUsers(Constants.SITE); Items items = new Items(); items.setName("User Defined..."); items.setImag

嗨,我是新来的
RXJava

我试图从包含arraylist的多个Observable中获取
用户
。我想合并这两个数据并将其发布到Observer

这是我的片段

    Observable<Users> baseDataObservable = mService.getUsers(Constants.SITE);

    Items items = new Items();
    items.setName("User Defined...");
    items.setImageURL("http://www.proto.gr/sites/www.proto.gr/files/styles/colorbox/public/images/fruits/cherry.png");
    ArrayList<Items> items1 = new ArrayList<>();
    items1.add(items);

    Users users = new Users();
    users.setItems(items1);
    Observable<Users> usersObservable = Observable.just(users);

    Observable.merge(baseDataObservable, usersObservable)
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(observer);
Observable baseDataObservable=mService.getUsers(Constants.SITE);
项目=新项目();
items.setName(“用户定义…”);
items.setImageURL(“http://www.proto.gr/sites/www.proto.gr/files/styles/colorbox/public/images/fruits/cherry.png");
ArrayList items1=新的ArrayList();
项目1.添加(项目);
用户=新用户();
users.setItems(items1);
Observable usersObservable=Observable.just(用户);
合并(baseDataObservable,usersObservable)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.签署(观察员);
在上面的代码中,第一个observable从API获取数据,第二个将用户定义的数据放入

但是,当我在observer上使用
merge
时,我在
ArrayList
中只有一个数据,它是设置定义的数据,最初来自api的数据显示第二个可观察对象提供的数据

有人能帮我吗

如果您试图“合并”从这两个来源获得的数组列表,并且需要将它们合并到一个列表中,则需要使用
zip
运算符,而不是
merge

merge
操作符将在任何可观察对象触发时立即发出项,其中
zip
将从所有输入可观察对象收集结果,然后继续

在您的方法中,观察者将触发两次,结果为2。首先是用户定义的项目, 然后是来自API的结果(由于它是一个API调用,所以有一个延迟)

这样做可以得到一个综合结果

        Observable.zip(baseDataObservable, usersObservable, new BiFunction<Users, Users, ArrayList<Items>>() {
        @Override
        public ArrayList<Items> apply(Users usersFromApi, Users usersUserDefined) throws Exception {
            ArrayList<Items> itemsArrayList = new ArrayList<>();
            itemsArrayList.addAll(usersFromApi.getItems());
            itemsArrayList.addAll(usersUserDefined.getItems());
            return itemsArrayList;
        }
    }).subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new DisposableObserver<ArrayList<Items>>() {
                @Override
                public void onNext(ArrayList<Items> items) {
                    // here is the combined Arraylist
                }

                @Override
                public void onError(Throwable e) {

                }

                @Override
                public void onComplete() {

                }
            });
Observable.zip(baseDataObservable、usersObservable、new BiFunction(){
@凌驾
public ArrayList apply(Users usersFromApi,Users usersUserDefined)引发异常{
ArrayList itemsArrayList=新建ArrayList();
addAll(usersFromApi.getItems());
itemsArrayList.addAll(usersUserDefined.getItems());
返回项目列表;
}
}).subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.认购(新的可处置观察员){
@凌驾
public void onNext(数组列表项){
//这是组合的Arraylist
}
@凌驾
公共无效申报人(可丢弃的e){
}
@凌驾
未完成的公共空间(){
}
});

merge不会覆盖任何数据。baseDateObservable可能是空的,或者需要更长的时间才能返回数据。是的,baseDateObservable需要一些时间才能返回数据,那么我如何合并它呢?所以这里它不会自动合并,我们需要自动合并数据集。是因为我的数据不知道何时可用吗?
merge
运算符不合并结果。它将两个或多个观察值合并在一起,并且每当任何合并的观察值触发时,该组合的观察值将发出,但
zip
将等待来自所有组合观察值的完整信号,并且仅在所有组合观察值完成后才进入下一级,查看并