Как преобразовать concurentHashMap в Guava Cache - PullRequest
0 голосов
/ 05 августа 2020

Допустим, у нас есть метод, который возвращает 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();

Требуемый тип : String - Прилагается: параллельная карта

Я пробовал либо:

    LoadingCache<String, String> cache = CacheBuilder.newBuilder()
            .build(CacheLoader.from(this::getAllOldAndNewPairs));

, и либо это не дало желаемого эффекта.

Буду благодарен за предложения, как решить эту проблему проблема и заполните кеш значения из метода getAllOldAndNewPairs.

1 Ответ

1 голос
/ 05 августа 2020

Любая реализация кэша гуавы может быть заполнена через карту. Следующий метод является частью интерфейса Guava Cache:

void putAll(Map<? extends K, ? extends V> var1);

При этом вы неправильно используете LoadingCache. Когда ключ отсутствует в кэше, загрузчик кеша предоставляет logi c для определения значения , соответствующего ключу . Следовательно, загрузчик кеша возвращает объект значения (String в вашем случае).

...