使用 RxJava 观察列表"add"和"remove"操作



我想知道是否可以使用RxJava来获取列表(更具体地说,ArrayList(的更新。 我想要的是让 n 个订阅者在列表添加或删除项目时获得更新。我需要知道操作是什么,而不仅仅是修改的项目。

我试过搜索这个,但到目前为止,我找到的最接近的东西是这个答案

但是,这仅涵盖"添加"功能,而不是"删除"...

当一个项目添加到列表中时,onAdd(Item item)调用一个函数,然后在删除它时调用另一个函数onRemove(Item item)

如果这不是使用RxJava的正确方法,请告诉我,我正在学习并接受各种帮助/批评:)

谢谢 伊斯克莱

有几种方法可以做到这一点。一种方法是添加第二个可观察量,这应该很容易。第二个选项是每次有通知时传递操作。

例如(使用 lombok 生成构造函数、getter 等(:

public class ObservableListExample {
@NoArgsConstructor
public static class ObservableList<T> {
protected final List<T> list = new ArrayList<T>();
protected final PublishSubject<Notification<T>> onChange = PublishSubject.create();
public void add(T value) {
list.add(value);
onChange.onNext(new Notification<T>(Operation.ADD, value));
}
public void remove(T value) {
list.remove(value);
onChange.onNext(new Notification<T>(Operation.REMOVE, value));
}
public Observable<Notification<T>> getObservable() {
return onChange;
}
}
public static void main(String[] args) throws Exception {
ObservableList<Integer> olist = new ObservableList<>();
olist.getObservable().subscribe(n -> System.out.println("op: " + n.getOperation() + " i: " + n.getItem()));
olist.add(1);
Thread.sleep(1000);
olist.add(2);
Thread.sleep(1000);
olist.add(3);
Thread.sleep(1000);
olist.remove(2);
}
public static enum Operation {
ADD,
REMOVE
}
@Getter
@AllArgsConstructor
public static class Notification<T> {
private Operation operation;
private T Item;
}
}

输出:

op: ADD i: 1
op: ADD i: 2
op: ADD i: 3
op: REMOVE i: 2

最新更新