java - java - 如何在Java中使用观察者模式来检测Java列表中的变化?
问题描述
我想检测我的 ArrayList 的变化myList
。每次我从 ArrayList 添加、删除或更新任何内容时。我想通知用户。我已经使用了以下代码。setValues
当函数用于设置列表时,它会通知用户。有没有其他方法可以实现它,以便每次我更改列表用户都会收到通知?谢谢你。
// observable class which will contain my List.
package com.psl;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Observable;
public class MyList extends Observable{
private List<Map<String,Object>> values;
public List<Map<String, Object>> getValues() {
return values;
}
public void setValues(List<Map<String, Object>> values) {
if(getValues()==null && values!=null){
setChanged();
notifyObservers();
}
else if( !this.values.equals(values)){
setChanged();
notifyObservers();
}
this.values = values;
}
public static void main(String[] args) {
MyList myList = new MyList();
List<Map<String, Object>> values = new ArrayList<Map<String, Object>>();
Notify notify = new Notify();
myList.addObserver(notify);
Map<String, Object> map = new HashMap<String, Object>();
map.put("string_value", null);
myList.setValues(values);
}
}
// Observer which will notify user when list is updated.
package com.psl;
import java.util.Observable;
import java.util.Observer;
public class Notify implements Observer{
@Override
public void update(Observable o, Object arg) {
System.out.println("List has been changed");
}
}
解决方案
JavaFX 有 ObservableList 的实现,也许你可以使用它:
javafx.collections.ObservableList a = javafx.collections.FXCollections.observableArrayList();
a.addListener(new javafx.collections.ListChangeListener<String>() {
@Override
public void onChanged(Change<? extends String> c) {
System.out.println(c);
}});
a.add("aa");
a.add("bb");
推荐阅读
- javascript - 如何使用 javascript 生成标签
- flutter - 如何在 macos 中为颤振和渡槽安装两个不同版本的飞镖
- reactjs - 将 React App 部署到 github 页面时,manifest.json 出现 404 错误和问题
- ruby-on-rails - MP4 文件未在 React / Rails 应用程序上加载
- laravel - 如何从数据库中删除记录?
- macos - Visual Studio for Mac,从内容资源文件夹拖放不起作用
- c++ - 为什么派生类成员函数对指针视图[c++]隐藏?
- java - 在未排序的数组中查找 4 个连续相同值的整数 - Java
- wpf - 在使用模板设置复选框样式时保留绑定的问题
- assembly - 炸弹实验室作业第 5 阶段 - 编写其 C 等效项