如何将 concurentHashMap 转换为 Guava Cache <Key, Pair>
How to convert concurentHashMap into Guava Cache <Key, Pair>
假设我们有一个方法 returns ConcurentMap 与 对用于数字的旧值和新值。
public ConcurrentMap<String, String> getAllOldAndNewPairs() {
return databaseConnector.executeQuery(QUERY, new QueryLauncher<ConcurrentHashMap<String, String>>() {
@Override
public ConcurrentHashMap<String, String> processResult(Results results) throws DAOException {
ConcurrentHashMap<String, String> oldAndNewPairs = new ConcurrentHashMap<>();
while (results.next()) {
oldAndNewPairs.put(results.getString(Column.OLD_NUMBER), results.getString(Column.NEW_NUMBER));
}
return oldAndNewPairs;
}
});
}
我想用方法 getAllOldAndNewPairs()
中的 记录填充 guava 缓存
到目前为止我有这样的方法:
public void propagateCache() {
LoadingCache<String, String> loadingCache =
CacheBuilder.newBuilder().build(new CacheLoader<String, String>() {
@Override
public String load(String s) throws Exception {
return getAllOldAndNewPairs();
}
});
}
但目前 IDE 抱怨线路:
return getAllOldAndNewPairs();
Required Type: String - Provided: Concurrent Map<String, String>
我正在尝试:
LoadingCache<String, String> cache = CacheBuilder.newBuilder()
.build(CacheLoader.from(this::getAllOldAndNewPairs));
或者这并没有带来理想的效果。
对于如何解决此问题并使用方法 getAllOldAndNewPairs 中的 值填充缓存的建议,我将不胜感激。
任何番石榴缓存实现都可以通过地图填充。以下方法是 Guava 缓存接口的一部分:
void putAll(Map<? extends K, ? extends V> var1);
也就是说,您没有正确使用 LoadingCache。当键不存在于缓存中时,缓存加载器提供逻辑来确定对应于 key 的 value。因此,缓存加载程序 returns 值对象(在您的情况下为字符串)。
假设我们有一个方法 returns ConcurentMap 与
public ConcurrentMap<String, String> getAllOldAndNewPairs() {
return databaseConnector.executeQuery(QUERY, new QueryLauncher<ConcurrentHashMap<String, String>>() {
@Override
public ConcurrentHashMap<String, String> processResult(Results results) throws DAOException {
ConcurrentHashMap<String, String> oldAndNewPairs = new ConcurrentHashMap<>();
while (results.next()) {
oldAndNewPairs.put(results.getString(Column.OLD_NUMBER), results.getString(Column.NEW_NUMBER));
}
return oldAndNewPairs;
}
});
}
我想用方法 getAllOldAndNewPairs()
到目前为止我有这样的方法:
public void propagateCache() {
LoadingCache<String, String> loadingCache =
CacheBuilder.newBuilder().build(new CacheLoader<String, String>() {
@Override
public String load(String s) throws Exception {
return getAllOldAndNewPairs();
}
});
}
但目前 IDE 抱怨线路:
return getAllOldAndNewPairs();
Required Type: String - Provided: Concurrent Map<String, String>
我正在尝试:
LoadingCache<String, String> cache = CacheBuilder.newBuilder()
.build(CacheLoader.from(this::getAllOldAndNewPairs));
或者这并没有带来理想的效果。
对于如何解决此问题并使用方法 getAllOldAndNewPairs 中的
任何番石榴缓存实现都可以通过地图填充。以下方法是 Guava 缓存接口的一部分:
void putAll(Map<? extends K, ? extends V> var1);
也就是说,您没有正确使用 LoadingCache。当键不存在于缓存中时,缓存加载器提供逻辑来确定对应于 key 的 value。因此,缓存加载程序 returns 值对象(在您的情况下为字符串)。