Я пытаюсь решить следующую проблему
Пусть 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>>
:
current
: для текущих элементов (то есть, срок действия которых не истек) 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
, а не точно вставить в
Мне нужны подсказки на этом
Большое спасибо