Package io.github.xanthic.cache.api
Interface Cache<K,V>
- Type Parameters:
K- The type of keys that form the cacheV- The type of values contained in the cache
public interface Cache<K,V>
The basic interface that various cache implementations must provide.
This interface can be thought as a superset of Map;
less functionality is required here to achieve greater compatibility.
There cannot be duplicate keys, and null keys or values are not permitted.
Instances should be thread-safe, but no guarantee is made whether this is achieved through fine-grained locking or blunt synchronization.
Implementations ought to implement expiry and size-based eviction, as defined in ICacheSpec.
-
Method Summary
Modifier and Type Method Description voidclear()Removes all entries from the cache.Vcompute(K key, @NotNull java.util.function.BiFunction<? super K,? super V,? extends V> computeFunc)Computes what value should be associated with the specified key, or null if the mapping should be removed.VcomputeIfAbsent(K key, @NotNull java.util.function.Function<K,V> computeFunc)Obtains the value currently associated with the specified key, or atomically stores the computed value if no prior mapping existed.VcomputeIfPresent(K key, @NotNull java.util.function.BiFunction<? super K,? super V,? extends V> computeFunc)Computes a new value for a specific key, if a mapping already existed.Vget(K key)Obtains the value associated with the specified key.Vmerge(K key, V value, @NotNull java.util.function.BiFunction<V,V,V> mergeFunc)Associates the key with the specified value (or the result of the atomic merge function if a mapping already existed).Vput(K key, V value)Associates the specified key with the specified value, creating or replacing the mapping as needed.default voidputAll(@NotNull java.util.Map<? extends K,? extends V> map)Copies all of the mappings from the specified map to this cache.VputIfAbsent(K key, V value)Creates a mapping from the specified key to the specified value, if no mapping for the key already existed.Vremove(K key)Deletes any mapping that may exist for the specified key.booleanreplace(K key, V value)Replaces the entry for the specified key only if it is currently mapped to some value.booleanreplace(K key, V oldValue, V newValue)Replaces the value for the specified key only if it is currently mapped to the specified old value.longsize()
-
Method Details
-
get
Obtains the value associated with the specified key.- Parameters:
key- the key whose mapped value should be queried- Returns:
- the value associated with the key in the cache, or null if no such mapping was found
- Throws:
java.lang.NullPointerException- if the specified key is null
-
put
Associates the specified key with the specified value, creating or replacing the mapping as needed.- Parameters:
key- the key whose mapping should be created or updatedvalue- the value to be associated with the specified key- Returns:
- the previous value associated with the key, or null if no prior mapping existed
- Throws:
java.lang.NullPointerException- if the specified key or value is null
-
remove
Deletes any mapping that may exist for the specified key.- Parameters:
key- the key whose mapping should be deleted- Returns:
- the value in the removed mapping, or null if no mapping existed
- Throws:
java.lang.NullPointerException- if the specified key is null
-
clear
void clear()Removes all entries from the cache. -
size
long size()- Returns:
- the estimated number of entries contained in the cache
-
compute
@Nullable V compute(@NotNull K key, @NotNull @NotNull java.util.function.BiFunction<? super K,? super V,? extends V> computeFunc)Computes what value should be associated with the specified key, or null if the mapping should be removed.- Parameters:
key- the key with which the specified value is to be associatedcomputeFunc- the function to compute a value- Returns:
- the new value associated with the specified key, or null if none
- Throws:
java.lang.NullPointerException- if the specified key is null or the compute function is null
-
computeIfAbsent
Obtains the value currently associated with the specified key, or atomically stores the computed value if no prior mapping existed.- Parameters:
key- the key whose mapping should be created or returnedcomputeFunc- the value supplier for a given key, if no mapping already existed- Returns:
- the current (existing or computed) value associated with the key
- Throws:
java.lang.NullPointerException- if the specified key is null or the compute function is null
-
computeIfPresent
@Nullable V computeIfPresent(@NotNull K key, @NotNull @NotNull java.util.function.BiFunction<? super K,? super V,? extends V> computeFunc)Computes a new value for a specific key, if a mapping already existed.If the compute function yields null, the mapping should be removed.
- Parameters:
key- the key whose mapping should be updatedcomputeFunc- the function to compute the new value for an already existing mapping- Returns:
- the new value associated with the key, or null if none
- Throws:
java.lang.NullPointerException- if the specified key is null or the compute function is null
-
putIfAbsent
Creates a mapping from the specified key to the specified value, if no mapping for the key already existed.- Parameters:
key- the key whose mapping should be created or returnedvalue- the value that should be associated with the key if no prior mapping exists- Returns:
- the previous value associated with the key, or null if no mapping already existed
- Throws:
java.lang.NullPointerException- if the specified key or value is null
-
merge
V merge(@NotNull K key, @NotNull V value, @NotNull @NotNull java.util.function.BiFunction<V,V,V> mergeFunc)Associates the key with the specified value (or the result of the atomic merge function if a mapping already existed).- Parameters:
key- the key whose mapping should be created or updatedvalue- the value to be associated with the key or merged with the existing mapped valuemergeFunc- the function that takes the existing value and the new value to compute a merged value- Returns:
- the latest value associated with the specified key
- Throws:
java.lang.NullPointerException- if the specified key or the value or mergeFunc is null
-
replace
Replaces the entry for the specified key only if it is currently mapped to some value.- Parameters:
key- the key whose mapped value should be updatedvalue- the value to be associated with the specified key- Returns:
- whether a replacement occurred (a prior mapping must have existed to return true)
- Throws:
java.lang.NullPointerException- if the specified key or value is null
-
replace
Replaces the value for the specified key only if it is currently mapped to the specified old value.- Parameters:
key- the key whose mapped value should be updatedoldValue- the value expected to be already associated with the specified keynewValue- the value to be newly associated with the specified key- Returns:
- whether a replacement occurred
- Throws:
java.lang.NullPointerException- if a specified key or newValue is null
-
putAll
Copies all of the mappings from the specified map to this cache.- Parameters:
map- the map whose entries should be added to this cache- Throws:
java.lang.NullPointerException- if the map is null, or the specified map contains null keys or values
-