【问题标题】:How to do actions on a observable list on console input by user?如何在用户控制台输入的可观察列表上执行操作?
【发布时间】:2021-03-02 15:23:21
【问题描述】:

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

【问题讨论】:

    标签: java list kotlin observable subscription


    【解决方案1】:

    你应该像这样创建一个自定义列表:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-21
      • 1970-01-01
      • 1970-01-01
      • 2019-07-07
      • 1970-01-01
      • 2021-09-21
      • 1970-01-01
      相关资源
      最近更新 更多