Cómo utilizar patrón de observador en java para detectar cambios en la lista de Java?

Akshay Bande:

Quiero detectar el cambio en mi ArrayList myList. Cada vez que añadir, eliminar o actualizar cualquier cosa de ArrayList. Quiero notificar al usuario sobre ello. He utilizado siguiente código para ello. Notifica usuario cuando setValuesla función se utiliza para set list. ¿Hay alguna otra manera de ponerla en práctica para que cada lista de cambios que vez que el usuario recibirá una notificación? Gracias.

// 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");                
    }

}
eltabo:

JavaFX tiene una implementación de ObservableList, tal vez se puede usar:

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");

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=227171&siteId=1
Recomendado
Clasificación