我需要在一个不断变化的数组上创建一个Observer(添加元素).
我正在使用Obserable.from(Iterable),但它似乎在创建时创建了ArrayList上的Observable.
每次ArrayList获取添加的新元素时,我都需要通知Observer并执行Action.
jua*_*ara 38
你去吧 感谢RxJava Google Group上的DávidKarnok
import java.util.ArrayList;
import java.util.List;
import rx.Observable;
import rx.subjects.PublishSubject;
public class ObservableListExample {
public static class ObservableList<T> {
protected final List<T> list;
protected final PublishSubject<T> onAdd;
public ObservableList() {
this.list = new ArrayList<T>();
this.onAdd = PublishSubject.create();
}
public void add(T value) {
list.add(value);
onAdd.onNext(value);
}
public Observable<T> getObservable() {
return onAdd;
}
}
public static void main(String[] args) throws Exception {
ObservableList<Integer> olist = new ObservableList<>();
olist.getObservable().subscribe(System.out::println);
olist.add(1);
Thread.sleep(1000);
olist.add(2);
Thread.sleep(1000);
olist.add(3);
}
}
Run Code Online (Sandbox Code Playgroud)
我会考虑这种基于 BehaviourSubject 的方法。这与 juanpavergara 的解决方案不同,当订阅 Observable 时, onNext() 将立即发送给观察者。
public class ObservableList<T> {
protected final List<T> list;
protected final BehaviorSubject<List<T>> behaviorSubject;
public ObservableList(List<T> list) {
this.list = list;
this.behaviorSubject = BehaviorSubject.create(list);
}
public Observable<List<T>> getObservable() {
return behaviorSubject;
}
public void add(T element) {
list.add(element);
behaviorSubject.onNext(list);
}
}
private void main() {
final List<Integer> list = new ArrayList<>();
list.add(0);
list.add(1);
final ObservableList<Integer> olist = new ObservableList<>(list);
olist.getObservable().subscribe(System.out::println);
olist.add(2);
olist.add(3);
}
Run Code Online (Sandbox Code Playgroud)
在实现 MVP 时,当您想要观察系统中的一个组件(即:一个存储库或数据源)返回的一种资源(即:一组对象),并且您想要观察者(即:Presenter 或Interactor)在将元素添加到系统另一部分的列表时收到通知。
| 归档时间: |
|
| 查看次数: |
19622 次 |
| 最近记录: |