void invalidateAll(Iterable<?> keys) { // TODO(fry): batch by segment for (Object key : keys) { remove(key); } }
@Override public void invalidate(Object key) { checkNotNull(key); localCache.remove(key); }
@Override public void invalidate(Object key) { checkNotNull(key); localCache.remove(key); }
void invalidateAll(Iterable<?> keys) { // TODO(fry): batch by segment for (Object key : keys) { remove(key); } }
@Override public void invalidate(Object key) { checkNotNull(key); localCache.remove(key); }
boolean removeIf(BiPredicate<? super K, ? super V> filter) { checkNotNull(filter); boolean changed = false; for (K key : keySet()) { while (true) { V value = get(key); if (value == null || !filter.test(key, value)) { break; } else if (LocalCache.this.remove(key, value)) { changed = true; break; } } } return changed; }
boolean removeIf(BiPredicate<? super K, ? super V> filter) { checkNotNull(filter); boolean changed = false; for (K key : keySet()) { while (true) { V value = get(key); if (value == null || !filter.test(key, value)) { break; } else if (LocalCache.this.remove(key, value)) { changed = true; break; } } } return changed; }
public void testRemovalListenerCheckedException() { final RuntimeException e = new RuntimeException(); RemovalListener<Object, Object> listener = new RemovalListener<Object, Object>() { @Override public void onRemoval(RemovalNotification<Object, Object> notification) { throw e; } }; CacheBuilder<Object, Object> builder = createCacheBuilder().removalListener(listener); final LocalCache<Object, Object> cache = makeLocalCache(builder); Object key = new Object(); cache.put(key, new Object()); checkNothingLogged(); cache.remove(key); checkLogged(e); }
public void testRemoveIfWithConcurrentRemoval() { LocalCache<Integer, Integer> map = makeLocalCache(createCacheBuilder().concurrencyLevel(1).initialCapacity(1)); map.put(0, 1); map.put(1, 1); map.put(2, 1); map.entrySet() .removeIf( entry -> { assertThat(entry.getValue()).isNotNull(); map.remove((entry.getKey() + 1) % 3); return false; }); assertEquals(1, map.size()); }
abstract class AbstractCacheSet<T> extends AbstractSet<T> { @Weak final ConcurrentMap<?, ?> map; AbstractCacheSet(ConcurrentMap<?, ?> map) { this.map = map; } @Override public int size() { return map.size(); } @Override public boolean isEmpty() { return map.isEmpty(); } @Override public void clear() { map.clear(); } // super.toArray() may misbehave if size() is inaccurate, at least on old versions of Android. // https://code.google.com/p/android/issues/detail?id=36519 / http://r.android.com/47508 @Override public Object[] toArray() { return toArrayList(this).toArray(); } @Override public <E> E[] toArray(E[] a) { return toArrayList(this).toArray(a); } }
void invalidateAll(Iterable<?> keys) { // TODO(fry): batch by segment for (Object key : keys) { remove(key); } }
void invalidateAll(Iterable<?> keys) { // TODO(fry): batch by segment for (Object key : keys) { remove(key); } }
void invalidateAll(Iterable<?> keys) { // TODO(fry): batch by segment for (Object key : keys) { remove(key); } }
void invalidateAll(Iterable<?> keys) { // TODO(fry): batch by segment for (Object key : keys) { remove(key); } }
@Override public void invalidate(Object key) { checkNotNull(key); localCache.remove(key); }
@Override public void invalidate(Object key) { checkNotNull(key); localCache.remove(key); }
@Override public void invalidate(Object key) { checkNotNull(key); localCache.remove(key); }
@Override public void invalidate(Object key) { checkNotNull(key); localCache.remove(key); }
@Override public void invalidate(Object key) { checkNotNull(key); localCache.remove(key); }