From 386900e8f0a3b139cbbad3d2cadf54598604a1db Mon Sep 17 00:00:00 2001 From: Jonathan Cobb Date: Tue, 21 Jan 2020 12:35:28 -0500 Subject: [PATCH] check/clean map on all operations --- src/main/java/org/cobbzilla/util/collection/ExpirationMap.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/org/cobbzilla/util/collection/ExpirationMap.java b/src/main/java/org/cobbzilla/util/collection/ExpirationMap.java index 61de175..1fb1a94 100644 --- a/src/main/java/org/cobbzilla/util/collection/ExpirationMap.java +++ b/src/main/java/org/cobbzilla/util/collection/ExpirationMap.java @@ -95,15 +95,18 @@ public class ExpirationMap implements Map { } @Override public V putIfAbsent(K key, V value) { + if (lastCleaned+cleanInterval > now()) cleanExpired(); final ExpirationMapEntry val = map.putIfAbsent(key, new ExpirationMapEntry<>(value)); return val == null ? null : val.value; } @Override public V computeIfAbsent(K key, Function mappingFunction) { + if (lastCleaned+cleanInterval > now()) cleanExpired(); return map.computeIfAbsent(key, k -> new ExpirationMapEntry<>(mappingFunction.apply(k))).value; } @Override public V computeIfPresent(K key, BiFunction remappingFunction) { + if (lastCleaned+cleanInterval > now()) cleanExpired(); final ExpirationMapEntry found = map.computeIfPresent(key, (k, vExpirationMapEntry) -> new ExpirationMapEntry<>(remappingFunction.apply(k, vExpirationMapEntry.value))); return found == null ? null : found.value; }