public interface IMap <K,V> extends ConcurrentMap <K,V>, BaseMap<K,V>, Iterable <Map.Entry <K,V>> {
// Synchronous access methods
V get (Object key);
Map <K,V> getAll (Set <K> keys);
void set (K key, V value);
void setAll (Map <? extends K, ? extends V> map);
V put (K key, V value);
V putIfAbsent (K key, V value);
void putAll (Map <? extends K, ? extends V> map);
V replace (K key, V value);
boolean replace (K key, V oldValue, V newValue);
V remove (Object key);
boolean remove (Object key, Object value);
void removeAll (Predicate <K,V> predicate);
void delete (Object key);
void clear ();
boolean containsKey (Object key);
boolean containsValue (Object value);
Iterator <Entry <K,V>> iterator ();
Iterator <Entry <K,V>> iterator (int fetchSize);
Set <K> keySet ();
Set <K> keySet (Predicate <K,V> predicate);
Set <K> localKeySet ();
Set <K> localKeySet (Predicate <K,V> predicate);
Collection <V> values ();
Collection <V> values (Predicate <K,V> predicate);
Set <Map.Entry <K,V>> entrySet ();
Set <Map.Entry <K,V>> entrySet (Predicate <K,V> predicate);
// Entries can have limited lifetime
boolean setTtl (K key, long ttl, TimeUnit timeunit);
void set (K key, V value, long ttl, TimeUnit ttlUnit);
void set (K key, V value, long ttl, TimeUnit ttlUnit, long maxIdle, TimeUnit maxIdleUnit);
V put (K key, V value, long ttl, TimeUnit ttlUnit);
V put (K key, V value, long ttl, TimeUnit ttlUnit, long maxIdle, TimeUnit maxIdleUnit);
V putIfAbsent (K key, V value, long ttl, TimeUnit ttlUnit);
V putIfAbsent (K key, V value, long ttl, TimeUnit ttlUnit, long maxIdle, TimeUnit maxIdleUnit);
// Keys can be locked even if absent
void lock (K key);
void lock (K key, long leaseTime, TimeUnit timeUnit);
boolean tryLock (K key);
boolean tryLock (K key, long time, TimeUnit timeunit);
boolean tryLock (K key, long time, TimeUnit timeunit, long leaseTime, TimeUnit leaseTimeunit);
void unlock (K key);
void forceUnlock (K key);
boolean isLocked (K key);
boolean tryPut (K key, V value, long timeout, TimeUnit timeunit);
boolean tryRemove (K key, long timeout, TimeUnit timeunit);
// Asynchronous access methods
CompletionStage <V> getAsync (K key);
CompletionStage <Void> setAsync (K key, V value);
CompletionStage <Void> setAsync (K key, V value, long ttl, TimeUnit ttlUnit);
CompletionStage <Void> setAsync (K key, V value, long ttl, TimeUnit ttlUnit, long maxIdle, TimeUnit maxIdleUnit);
CompletionStage <Void> setAllAsync (Map <? extends K, ? extends V> map);
CompletionStage <V> putAsync (K key, V value);
CompletionStage <V> putAsync (K key, V value, long ttl, TimeUnit ttlUnit);
CompletionStage <V> putAsync (K key, V value, long ttl, TimeUnit ttlUnit, long maxIdle, TimeUnit maxIdleUnit);
CompletionStage <Void> putAllAsync (Map <? extends K, ? extends V> map);
CompletionStage <V> removeAsync (K key);
// Non transient entries can have backing store
void loadAll(boolean replaceExistingValues);
void loadAll(Set<K> keys, boolean replaceExistingValues);
boolean evict (K key);
void evictAll ();
void flush();
void putTransient (K key, V value, long ttl, TimeUnit ttlUnit);
void putTransient (K key, V value, long ttl, TimeUnit ttlUnit, long maxIdle, TimeUnit maxIdleUnit);
// Local and global state change listeners with predicate filtering are supported
UUID addLocalEntryListener (MapListener listener);
UUID addLocalEntryListener (MapListener listener, Predicate <K,V> predicate, boolean includeValue);
UUID addLocalEntryListener (MapListener listener, Predicate <K,V> predicate, K key, boolean includeValue);
UUID addEntryListener (MapListener listener, boolean includeValue);
UUID addEntryListener (MapListener listener, K key, boolean includeValue);
UUID addEntryListener (MapListener listener, Predicate <K,V> predicate, boolean includeValue);
UUID addEntryListener (MapListener listener, Predicate <K,V> predicate, K key, boolean includeValue);
boolean removeEntryListener (UUID id);
UUID addPartitionLostListener (MapPartitionLostListener listener);
boolean removePartitionLostListener (UUID id);
// Interceptors can modify or cancel operations
String addInterceptor (MapInterceptor interceptor);
boolean removeInterceptor (String id);
// Entry view provides entry access statistics
EntryView <K,V> getEntryView (K key);
LocalMapStats getLocalMapStats ();
// Distributed processing
<R> R executeOnKey (K key, EntryProcessor <K,V,R> entryProcessor);
<R> Map <K,R> executeOnKeys (Set<K> keys, EntryProcessor <K,V,R> entryProcessor);
<R> Map <K,R> executeOnEntries (EntryProcessor <K,V,R> entryProcessor);
<R> Map <K,R> executeOnEntries (EntryProcessor <K,V,R> entryProcessor, Predicate <K,V> predicate);
<R> Collection <R> project (Projection <? super Map.Entry<K,V>,R> projection);
<R> Collection <R> project (Projection <? super Map.Entry<K,V>,R> projection, Predicate <K,V> predicate);
<R> R aggregate (Aggregator <? super Map.Entry <K,V>,R> aggregator);
<R> R aggregate (Aggregator <? super Map.Entry <K,V>,R> aggregator, Predicate <K,V> predicate);
<R> CompletionStage <R> submitToKey (K key, EntryProcessor <K,V,R> entryProcessor);
<R> CompletionStage <Map<K,R>> submitToKeys (Set<K> keys, EntryProcessor <K,V,R> entryProcessor);
// Cache for continuous queries defined by predicates
QueryCache <K,V> getQueryCache (String name);
QueryCache <K,V> getQueryCache (String name, Predicate <K,V> predicate, boolean includeValue);
QueryCache <K,V> getQueryCache (String name, MapListener listener, Predicate <K,V> predicate, boolean includeValue);
...
}