@Test
public void testSubsetOfMapKeys() {
final Set<String> validKeys = ImmutableSet.of("a", "b", "c");
LoadingCache<Map<String, Integer>, Map<Integer, String>> keySubset =
KeyTransformingLoadingCache.from(keyValueSwapCache, new Function<Map<String, Integer>, Map<String, Integer>>() {
@Override
public Map<String, Integer> apply(Map<String, Integer> input) {
Map<String, Integer> replacement = Maps.newHashMap(input);
replacement.keySet().retainAll(validKeys);
return replacement;
}
});
Map<Integer, String> output = keySubset.getUnchecked(ImmutableMap.of("a", 1, "b", 2, "d", 4));
assertEquals(output, ImmutableMap.of(1, "a", 2, "b"));
assertEquals(keySubset.size(), 1, "Expected cache to contain one value");
assertEquals(keySubset.stats().loadCount(), 1, "Expected cache to have loaded one value");
Map<Integer, String> output2 = keySubset.getUnchecked(ImmutableMap.of("a", 1, "b", 2, "z", 26));
assertEquals(output2, output);
assertEquals(keySubset.size(), 1, "Expected cache to contain one value");
assertEquals(keySubset.stats().loadCount(), 1, "Expected cache to have loaded one value");
keySubset.getUnchecked(ImmutableMap.of("c", 3));
assertEquals(keySubset.size(), 2, "Expected cache to contain two values");
assertEquals(keySubset.stats().loadCount(), 2, "Expected cache to have loaded a second value");
}