我想知道是否可以使用 RxJava 来获取列表(更具体地说,ArrayList)上的更新。 我想要的是让 n 个订阅者在列表添加或删除项目时获得更新。我需要知道操作是什么,而不仅仅是修改的项目。
我尝试过搜索这个,但到目前为止我发现的最接近的是这个 answer
但是,这仅涵盖“添加”功能,而不涵盖“删除”功能...
最好的办法是在将项目添加到列表时调用一个函数 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
关于java - 使用RxJava观察List "add"和 "remove" Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59779721/