В качестве продолжения ответа @StuartMarks ответ . Моя библиотека StreamEx имеет операцию takeWhile
, которая совместима с текущей реализацией JDK-9. При запуске под JDK-9 он просто делегирует реализацию JDK (через MethodHandle.invokeExact
, которая очень быстро). При работе под JDK-8 будет использоваться реализация «polyfill». Поэтому, используя мою библиотеку, проблема может быть решена следующим образом:
IntStreamEx.iterate(1, n -> n + 1)
.takeWhile(n -> n < 10)
.forEach(System.out::println);
Ehcache является довольно хорошим решением для этого и имеет способ посмотреть (, getQuiet () является методом), таким образом, что это не обновляет неактивную метку времени. Внутренне, Ehcache реализован с рядом карт, отчасти как ConcurrentHashMap, таким образом, он имеет подобные виды преимуществ параллелизма.
Как насчет этого: https://commons.apache.org/proper/commons-jcs / (обновленный к новому адресу, поскольку JCS находится теперь в Apache палата общин)
При необходимости в чем-то простом это отвечало бы всем требованиям?
Map<K, V> myCache = Collections.synchronizedMap(new WeakHashMap<K, V>());
Это, который сохраняет на диск привычка, но Вы сказали, Вы хотели простой...
Ссылки:
(Поскольку Adam прокомментировал, синхронизируя карту, поражали производительность. Не высказывание идеи не имеет волос на нем, но было бы достаточно как быстрое и грязное решение.)
Попробовать Ehcache? Это позволяет Вам включать свои собственные алгоритмы истечения кэширования, таким образом, Вы могли управлять своей функциональностью быстрого взгляда.
можно сериализировать к диску, базе данных, через кластер и т.д.