@Experimental public static interface FunctionalMap.ReadOnlyMap<K,V> extends FunctionalMap<K,V>
EntryView.ReadEntryView
.
Read-only operations have the advantage that no locks are acquired for the duration of the operation and so it makes sense to have them a top-level interface dedicated to them.
Browsing methods that provide a read-only view of the cached data
are available via keys()
and entries()
.
Having keys()
makes sense since that way keys can be traversed
without having to bring values. Having entries()
makes sense
since it allows traversing both keys, values and any meta parameters
associated with them, but this is no extra cost to exposing just values
since keys are the main index and hence will always be available.
Hence, adding a method to only browse values offers nothing extra to
the API.
FunctionalMap.ReadOnlyMap<K,V>, FunctionalMap.ReadWriteMap<K,V>, FunctionalMap.WriteOnlyMap<K,V>
Modifier and Type | Method and Description |
---|---|
Traversable<EntryView.ReadEntryView<K,V>> |
entries()
Provides a
Traversable that allows clients to navigate all cached entries. |
<R> CompletableFuture<R> |
eval(K key,
Function<EntryView.ReadEntryView<K,V>,R> f)
Evaluate a read-only function on the value associated with the key
and return a
CompletableFuture with the return type of the function. |
default <R> CompletableFuture<R> |
eval(K key,
SerializableFunction<EntryView.ReadEntryView<K,V>,R> f)
Same as
eval(Object, Function) except that the function must also
implement Serializable |
<R> Traversable<R> |
evalMany(Set<? extends K> keys,
Function<EntryView.ReadEntryView<K,V>,R> f)
Evaluate a read-only function on a key and potential value associated in
the functional map, for each of the keys in the set passed in, and
returns an
Traversable to work on each computed function's result. |
default <R> Traversable<R> |
evalMany(Set<? extends K> keys,
SerializableFunction<EntryView.ReadEntryView<K,V>,R> f)
Same as
evalMany(Set, Function) except that the function must also
implement Serializable |
Traversable<K> |
keys()
Provides a
Traversable that allows clients to navigate all cached keys. |
FunctionalMap.ReadOnlyMap<K,V> |
withParams(Param<?>... ps)
Tweak read-only functional map executions providing
Param instances. |
getName, getStatus, isEncoded
close
FunctionalMap.ReadOnlyMap<K,V> withParams(Param<?>... ps)
Param
instances.withParams
in interface FunctionalMap<K,V>
<R> CompletableFuture<R> eval(K key, Function<EntryView.ReadEntryView<K,V>,R> f)
CompletableFuture
with the return type of the function.
If the user is not sure if the key is present, EntryView.ReadEntryView.find()
can be used to find out for sure. Typically, function implementations
would return value or MetaParam
information from the cache
entry in the functional map.
By returning CompletableFuture
instead of the function's
return type directly, the method hints at the possibility that to
execute the function might require to go remote to retrieve data in
persistent store or another clustered node.
This method can be used to implement read-only single-key based
operations in ConcurrentMap
and javax.cache.Cache
such as:
Map.get(Object)
Map.containsKey(Object)
javax.cache.Cache#get(Object)
javax.cache.Cache#containsKey(Object)
The function must not mutate neither the key returned through
EntryView.ReadEntryView.key()
nor the internally stored value provided
through EntryView.ReadEntryView.get()
or EntryView.ReadEntryView.find()
.
R
- function return typekey
- the key associated with the EntryView.ReadEntryView
to be
passed to the function.f
- function that takes a EntryView.ReadEntryView
associated with
the key, and returns a value.CompletableFuture
which will be completed with the
returned value from the functiondefault <R> CompletableFuture<R> eval(K key, SerializableFunction<EntryView.ReadEntryView<K,V>,R> f)
eval(Object, Function)
except that the function must also
implement Serializable
The compiler will pick this overload for lambda parameters, making them Serializable
<R> Traversable<R> evalMany(Set<? extends K> keys, Function<EntryView.ReadEntryView<K,V>,R> f)
Traversable
to work on each computed function's result.
The function passed in will be executed for as many keys
present in keys collection set. Similar to eval(Object, Function)
,
if the user is not sure whether a particular key is present,
EntryView.ReadEntryView.find()
can be used to find out for sure.
This method can be used to implement operations such as
javax.cache.Cache#getAll(Set)
.
DESIGN RATIONALE:
The function must not mutate neither the key returned through
EntryView.ReadEntryView.key()
nor the internally stored value provided
through EntryView.ReadEntryView.get()
or EntryView.ReadEntryView.find()
.
R
- function return typekeys
- the keys associated with each of the EntryView.ReadEntryView
passed in the function callbacksf
- function that takes a EntryView.ReadEntryView
associated with
the key, and returns a value. It'll be invoked once for each key
passed inTraversable
that can be navigated to
retrieve each function return valuedefault <R> Traversable<R> evalMany(Set<? extends K> keys, SerializableFunction<EntryView.ReadEntryView<K,V>,R> f)
evalMany(Set, Function)
except that the function must also
implement Serializable
The compiler will pick this overload for lambda parameters, making them Serializable
Traversable<K> keys()
Traversable
that allows clients to navigate all cached keys.
This method can be used to implement operations such as:
Traversable
to navigate each cached keyTraversable<EntryView.ReadEntryView<K,V>> entries()
Traversable
that allows clients to navigate all cached entries.
This method can be used to implement operations such as:
Map.containsValue(Object)
Map.values()
Map.entrySet()
javax.cache.Cache#iterator()
Traversable
to navigate each cached entryCopyright © 2021 JBoss by Red Hat. All rights reserved.