package com.aggrepoint.utils;
import java.util.Collection;
import java.util.Map;
import java.util.Set;
import java.util.function.Consumer;
public class MapListener<K, V> implements Map<K, V> {
private Map<K, V> inner;
private Consumer<Map<K, V>> listener;
public MapListener(Map<K, V> map, Consumer<Map<K, V>> listener) {
inner = map;
this.listener = listener;
}
@Override
public int size() {
return inner.size();
}
@Override
public boolean isEmpty() {
return inner.isEmpty();
}
@Override
public boolean containsKey(Object key) {
return inner.containsKey(key);
}
@Override
public boolean containsValue(Object value) {
return inner.containsValue(value);
}
@Override
public V get(Object key) {
return inner.get(key);
}
@Override
public V put(K key, V value) {
inner.put(key, value);
listener.accept(inner);
return value;
}
@Override
public V remove(Object key) {
V v = inner.remove(key);
listener.accept(inner);
return v;
}
@Override
public void putAll(Map<? extends K, ? extends V> m) {
inner.putAll(m);
listener.accept(inner);
}
@Override
public void clear() {
inner.clear();
listener.accept(inner);
}
@Override
public Set<K> keySet() {
return inner.keySet();
}
@Override
public Collection<V> values() {
return inner.values();
}
@Override
public Set<java.util.Map.Entry<K, V>> entrySet() {
return inner.entrySet();
}
}