Структура данных ключевого значения с временной итерацией - PullRequest
0 голосов
/ 23 сентября 2019

Я пытаюсь решить следующую проблему

  • Пусть V будет типом объекта, для которого я могу вычислить хэш типа K.Пусть dt будет неотрицательным количеством времени.

  • Пусть onNew будет Consumer<V>, выполняемым всякий раз, когда запрашивается новый объект типа V и его ключне видели в последний dt раз.

  • Пусть merge будет BiFunction<V/*old*/,V/*new*/,V,>, выполняемым всякий раз, когда объект, ключ которого присутствует в последний dt раз.

  • Пусть clear - это метод void, периодически выполняемый с поиском V, созданным до dt и, следовательно, с истекшим сроком действия.

  • Пусть onExpire будетa Потребитель выполнен для просроченных объектов.

У меня есть вставная обертка:

private class Insertion<V> 
{
    public V v;
    public Instant insertedAt; 
}

и две LinkedHashMap<K, Insertion<V>>:

  1. current: для текущих элементов (то есть, срок действия которых не истек)
  2. expired: для элементов с истекшим сроком действия.

Правильно ли следующий код?

// If the element is evicted, we move it to current      
Insertion<V> currentEvictedItem = expired.remove(elementKey);
if (currentEvictedItem != null)
{
    currentItems.put(elementKey, currentEvictedItem);
}

LinkedHashMap сделать порядок сохранения, но я хочу упорядочить по полю insertedAt, а не точно вставить в

Мне нужны подсказки на этом

Большое спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...