Как отмечено в комментариях:
Концепция вычислительной карты Гуавы была заменена на LoadingCache
. Также в интерфейс Map добавлен Java 8: хороший computeIfAbsent
метод по умолчанию, который не нарушает контракт карты и отличается ленивой оценкой.
У Гуавы была идея "вычислительной карты", которая будет выполнять функцию для предоставления значения, если оно отсутствует. Это было реализовано в MapMaker.makeComputingMap
; теперь вы можете использовать CacheBuilder
- см. CacheBuilder.build
для более подробной информации.
Это может быть излишним для того, что вы ищете - вам может быть лучше просто написать реализацию Map
, которая имеет a Map
(с использованием композиции, а не расширения какой-либо конкретной реализации), а затем просто верните значение по умолчанию, если оно отсутствует. Каждый метод, кроме get
, может просто делегировать другую карту:
public class DefaultingMap<K, V> implements Map<K, V>
{
private final Map<K, V> map;
private final V defaultValue;
public DefaultingMap(Map<K, V> map, V defaultValue)
{
this.map = map;
this.defaultValue = defaultValue;
}
@Override public V get(Object key)
{
V ret = map.get(key);
if (ret == null)
{
ret = defaultValue;
}
return ret;
}
@Override public int size()
{
return map.size();
}
// etc
}