/
ZipExampleActivity.java
105 lines (93 loc) · 3.79 KB
/
ZipExampleActivity.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
package com.liu.mvpdemo.activity.operators;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.TextView;
import com.liu.mvpdemo.R;
import com.liu.mvpdemo.activity.util.ConstantValues;
import com.liu.mvpdemo.activity.util.RxUtil;
import com.liu.mvpdemo.activity.util.Utils;
import com.liu.mvpdemo.bean.User;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.BiFunction;
/**
* zip的使用:
* zip操作符返回一个Observable,它使用这个函数按顺序结合两个或多个Observables发射的数据项,然后
* 它发射这个函数返回的结果;zip的最后一个参数接收每个Observable发射的数据,返回被压缩后的数据(最多可以有九个Observable参数)
* @author liuxuhui
* @date 2019/1/17
*/
public class ZipExampleActivity extends AppCompatActivity {
@BindView(R.id.textView)
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_zip_example);
ButterKnife.bind(this);
}
@OnClick(R.id.button)
public void doSomeWork(){
Observable.zip(getCricketFansObservable(), getFootballFansObservable(), new BiFunction<List<User>, List<User>, List<User>>() {
@Override
public List<User> apply(List<User> users, List<User> users2) throws Exception {
users.addAll(users2);
return users;
}
})
.compose(RxUtil.applyObservableThread())
.subscribe(new Observer<List<User>>() {
@Override
public void onSubscribe(Disposable d) {
Log.d(ConstantValues.TAG, "onSubscribe:" + d.isDisposed());
}
@Override
public void onNext(List<User> users) {
textView.append("onNext:");
for(User user : users) {
textView.append(user.firstname + "\n");
}
Log.d(ConstantValues.TAG, "onNext:" + users.size());
}
@Override
public void onError(Throwable e) {
textView.append("onError:" + e.getMessage());
Log.d(ConstantValues.TAG, "onError:" + e.getMessage());
}
@Override
public void onComplete() {
Log.d(ConstantValues.TAG, "onComplete");
}
});
}
private Observable<List<User>> getCricketFansObservable() {
return Observable.create(new ObservableOnSubscribe<List<User>>() {
@Override
public void subscribe(ObservableEmitter<List<User>> emitter) throws Exception {
if(!emitter.isDisposed()) {
emitter.onNext(Utils.getUserListWhoLovesCricket());
emitter.onComplete();
}
}
});
}
private Observable<List<User>> getFootballFansObservable() {
return Observable.create(new ObservableOnSubscribe<List<User>>() {
@Override
public void subscribe(ObservableEmitter<List<User>> emitter) throws Exception {
if(!emitter.isDisposed()) {
emitter.onNext(Utils.getUserListWhoLovesFootball());
emitter.onComplete();
}
}
});
}
}