skysurvival

Untitled

Apr 20th, 2017
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.41 KB | None | 0 0
  1.  
  2. import java.util.Map;
  3. import java.util.Objects;
  4. import java.util.concurrent.ConcurrentHashMap;
  5.  
  6. public class TemporaryConcurrentMap<K, V> extends ConcurrentHashMap<K, V> {
  7.  
  8.     private final long defaultCooldownTime;
  9.  
  10.     private final ConcurrentHashMap<K, Long> cooldownMap = new ConcurrentHashMap<>();
  11.  
  12.     public TemporaryConcurrentMap(long defaultCooldown) {
  13.         this.defaultCooldownTime = defaultCooldown;
  14.     }
  15.  
  16.     @Override
  17.     public V put(K key, V value) {
  18.         return put(key, value, defaultCooldownTime);
  19.     }
  20.  
  21.     public V put(K key, V value, Long cooldownTime) {
  22.         V out = super.put(key, value);
  23.         if (!Objects.isNull(out)) {
  24.             this.cooldownMap.put(key, System.currentTimeMillis() + cooldownTime);
  25.         }
  26.         return out;
  27.     }
  28.  
  29.     @Override
  30.     public void putAll(Map<? extends K, ? extends V> m) {
  31.         putAll(m, defaultCooldownTime);
  32.     }
  33.  
  34.     public void putAll(Map<? extends K, ? extends V> m, Long cooldownTime) {
  35.         m.entrySet().forEach((e) -> {
  36.             this.cooldownMap.put(e.getKey(), System.currentTimeMillis() + cooldownTime);
  37.         });
  38.         super.putAll(m);
  39.     }
  40.  
  41.     @Override
  42.     public boolean containsKey(Object key) {
  43.         Long cooldown = cooldownMap.getOrDefault(key, 0l);
  44.         if (cooldown >= System.currentTimeMillis()) {
  45.             return super.containsKey(key);
  46.         }
  47.         this.remove(key);
  48.         return false;
  49.     }
  50.  
  51.     @Override
  52.     public boolean containsValue(Object value) throws UnsupportedOperationException {
  53.         throw new UnsupportedOperationException();
  54.     }
  55.  
  56.     @Override
  57.     public void clear() {
  58.         super.clear();
  59.         cooldownMap.clear();
  60.     }
  61.  
  62.     @Override
  63.     public V get(Object key) {
  64.         Long cooldown = cooldownMap.getOrDefault(key, 0l);
  65.         if (cooldown >= System.currentTimeMillis()) {
  66.             return super.get(key);
  67.         }
  68.         this.remove(key);
  69.         return null;
  70.     }
  71.  
  72.     @Override
  73.     public V getOrDefault(Object key, V defaultValue) {
  74.         V v;
  75.         return (v = this.get(key)) == null ? defaultValue : v;
  76.     }
  77.  
  78.     @Override
  79.     public V remove(Object key) {
  80.         cooldownMap.remove(key);
  81.         return super.remove(key);
  82.     }
  83.  
  84.     @Override
  85.     public boolean remove(Object key, Object value) throws UnsupportedOperationException {
  86.         throw new UnsupportedOperationException();
  87.     }
  88. }
Advertisement
Add Comment
Please, Sign In to add comment