【发布时间】:2021-03-02 15:23:21
【问题描述】:
我创建了一个列表,用于观察用户控制台输入触发的更改,假设用户输入了一个字符串,那么该字符串应该在观察列表中订阅。
【问题讨论】:
标签: java list kotlin observable subscription
我创建了一个列表,用于观察用户控制台输入触发的更改,假设用户输入了一个字符串,那么该字符串应该在观察列表中订阅。
【问题讨论】:
标签: java list kotlin observable subscription
你应该像这样创建一个自定义列表:
public class CustomList<T> extends ArrayList<T> {
public static void main(String[] args) {
CustomList<String> customList = new CustomList<>();
customList.add("First Adding");
}
public boolean add(T t) {
boolean b = super.add(t);
System.out.println("you just add :" + t.toString());
return b;
}
}
如果你想有很多自定义事件,你可以这样做:
public class CustomList<T> extends ArrayList<T> {
public static void main(String[] args) {
CustomList<String> customList = new CustomList<>(new EventCustomList<String>() {
public void remove(String s) {
System.out.println("you just remove :" + s);
}
public void add(String s) {
System.out.println("you just add :" + s);
}
});
customList.add("First Adding");
}
private EventCustomList event;
public CustomList (EventCustomList<T> event) {
this.event = event;
}
public boolean add(T t) {
boolean b = super.add(t);
event.add(t);
return b;
}
public T remove(int index) {
T t = super.remove(index);
remove(index);
return t;
}
public interface EventCustomList<T> {
void add(T t);
void remove(T t);
}
}
或者你可以使用BackedList喜欢这个话题How to add listener on ArrayList in java
public static void main(String[] args) {
BackedList<String> list = new BackedList();
list.addListener(new BackedListListener<String>(){
@Override
public void setOnChanged(ListChangeEvent<String> event) {
if (event.wasAdded()) {
event.getChangeList().forEach(e->{
// do whatever you need to do
System.out.println("added: " + e);
});
}
if (event.wasRemoved()) {
// do whatever you need to dl
event.getChangeList().forEach(e->{System.out.println(e + " was removed");});
}
}
});
【讨论】: