public void trimToSize() { for (Collection<V> collection : this.map.values()) { FastList<V> fastList = (FastList<V>) collection; fastList.trimToSize(); } }
public void trimToSize() { for (Collection<V> collection : this.map.values()) { FastList<V> fastList = (FastList<V>) collection; fastList.trimToSize(); } }
@Override public Collection<V> values() { synchronized (this.lock) { return SynchronizedMutableCollection.of(this.getDelegate().values(), this.lock); } }
@Override public Collection<V> values() { synchronized (this.lock) { return SynchronizedMutableCollection.of(this.getDelegate().values(), this.lock); } }
@Override public void clear() { // Clear each collection, to make previously returned collections empty. for (C collection : this.map.values()) { collection.clear(); } this.map.clear(); this.clearTotalSize(); }
@Override public void clear() { // Clear each collection, to make previously returned collections empty. for (C collection : this.map.values()) { collection.clear(); } this.map.clear(); this.clearTotalSize(); }
/** * @return mapping of item IDs to count of users that have interacted with that item */ public Map<String,Integer> getItemCounts() { ObjectIntHashMap<String> counts = ObjectIntHashMap.newMap(); try (AutoLock al = knownItemsLock.autoReadLock()) { knownItems.values().forEach(ids -> { synchronized (ids) { ids.forEach(id -> counts.addToValue(id, 1)); } }); } // No way to get Java map from primitive map directly (?) Map<String,Integer> javaCounts = new HashMap<>(counts.size()); counts.forEachKeyValue(javaCounts::put); return javaCounts; }
/** * Like {@link #retainRecentAndUserIDs(Collection)} and {@link #retainRecentAndItemIDs(Collection)} * but affects the known-items data structure. * * @param users users that should be retained, which are coming in the new model updates * @param items items that should be retained, which are coming in the new model updates */ void retainRecentAndKnownItems(Collection<String> users, Collection<String> items) { // Keep all users in the new model, or, that have been added since last model MutableSet<String> recentUserIDs = UnifiedSet.newSet(); X.addAllRecentTo(recentUserIDs); try (AutoLock al = knownItemsLock.autoWriteLock()) { knownItems.keySet().removeIf(key -> !users.contains(key) && !recentUserIDs.contains(key)); } // This will be easier to quickly copy the whole (smallish) set rather than // deal with locks below MutableSet<String> allRecentKnownItems = UnifiedSet.newSet(); Y.addAllRecentTo(allRecentKnownItems); Predicate<String> notKeptOrRecent = value -> !items.contains(value) && !allRecentKnownItems.contains(value); try (AutoLock al = knownItemsLock.autoReadLock()) { knownItems.values().forEach(knownItemsForUser -> { synchronized (knownItemsForUser) { knownItemsForUser.removeIf(notKeptOrRecent); } }); } }
public void trimToSize() { for (Collection<V> collection : this.map.values()) { FastList<V> fastList = (FastList<V>) collection; fastList.trimToSize(); } }
@Override public Collection<V> values() { synchronized (this.lock) { return SynchronizedMutableCollection.of(this.getDelegate().values(), this.lock); } }
@Override public void clear() { // Clear each collection, to make previously returned collections empty. for (C collection : this.map.values()) { collection.clear(); } this.map.clear(); this.clearTotalSize(); }