如何在用户输入的控制台上对可观察列表进行操作?



我创建了一个列表,用于观察由用户的控制台输入触发的更改,假设用户输入一个字符串,那么该字符串应该在观察列表中订阅。

您应该像这样创建一个customList:

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,就像这个主题如何在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");});
}
}
});

最新更新