@Override public Map<K, ValueHolder<V>> bulkComputeIfAbsent(Set<? extends K> keys, final Function<Iterable<? extends K>, Iterable<? extends Map.Entry<? extends K, ? extends V>>> mappingFunction) throws StoreAccessException { Map<K, ValueHolder<V>> result = new HashMap<>(keys.size()); for (K key : keys) { checkKey(key); Function<K, V> function = k -> { java.util.Iterator<? extends Map.Entry<? extends K, ? extends V>> iterator = mappingFunction.apply(Collections.singleton(k)).iterator(); Map.Entry<? extends K, ? extends V> result1 = iterator.next(); if (result1 != null) { checkKey(result1.getKey()); return result1.getValue(); } else { return null; } }; ValueHolder<V> computed = computeIfAbsent(key, function); result.put(key, computed); } return result; }
@Test public void testComputeIfAbsentOnExpiredEntry() throws StoreAccessException { offHeapStore = createAndInitStore(timeSource, ExpiryPolicyBuilder.timeToIdleExpiration(Duration.ofMillis(10L))); offHeapStore.put("key", "value"); timeSource.advanceTime(20L); offHeapStore.computeIfAbsent("key", mappedKey -> { assertThat(mappedKey, is("key")); return "value2"; }); assertThat(getExpirationStatistic(offHeapStore).count(StoreOperationOutcomes.ExpirationOutcome.SUCCESS), is(1L)); }
@Override public Map<K, ValueHolder<V>> bulkComputeIfAbsent(Set<? extends K> keys, final Function<Iterable<? extends K>, Iterable<? extends Map.Entry<? extends K, ? extends V>>> mappingFunction) throws StoreAccessException { Map<K, ValueHolder<V>> result = new HashMap<>(keys.size()); for (K key : keys) { checkKey(key); Function<K, V> function = k -> { java.util.Iterator<? extends Map.Entry<? extends K, ? extends V>> iterator = mappingFunction.apply(Collections.singleton(k)).iterator(); Map.Entry<? extends K, ? extends V> result1 = iterator.next(); if (result1 != null) { checkKey(result1.getKey()); return result1.getValue(); } else { return null; } }; ValueHolder<V> computed = computeIfAbsent(key, function); result.put(key, computed); } return result; }