@Override public InternalCacheEntry<K, V> remove(Object k) { final InternalCacheEntry<K, V>[] reference = new InternalCacheEntry[1]; entries.compute( (K) k, (key, entry) -> { activator.onRemove(key, entry == null); reference[0] = entry; return null; }); InternalCacheEntry<K, V> e = reference[0]; if (trace) { log.tracef("Removed %s from container", e); } return e == null || (e.canExpire() && e.isExpired(timeService.wallClockTime())) ? null : e; }
@Override public InternalCacheEntry<K, V> compute(K key, ComputeAction<K, V> action) { return entries.compute( key, (k, oldEntry) -> { InternalCacheEntry<K, V> newEntry = action.compute(k, oldEntry, entryFactory); if (newEntry == oldEntry) { return oldEntry; } else if (newEntry == null) { activator.onRemove(k, false); return null; } activator.onUpdate(k, oldEntry == null); if (trace) log.tracef("Store %s in container", newEntry); return newEntry; }); }