There are many ways of implementing this, depending on how much control do you have over the party that is adding to list. For example:
public class ObservableListExample {
public static class ObservableList<T> {
protected final List<T> list;
protected final PublishSubject<T> onAdd;
public ObservableList() {
this.list = new ArrayList<>();
this.onAdd = PublishSubject.create();
}
public void add(T value) {
list.add(value);
onAdd.onNext(value);
}
public Observable<T> addObservable() {
return onAdd;
}
}
public static void main(String[] args) {
ObservableList<Integer> olist = new ObservableList<>();
olist.addObservable().subscribe(System.out::println);
olist.add(1);
olist.add(2);
olist.add(3);