Class LazyMap<K,V>
- java.lang.Object
-
- org.apache.commons.collections4.map.AbstractIterableMap<K,V>
-
- org.apache.commons.collections4.map.AbstractMapDecorator<K,V>
-
- org.apache.commons.collections4.map.LazyMap<K,V>
-
- Type Parameters:
K
- the type of the keys in this mapV
- the type of the values in this map
- All Implemented Interfaces:
Serializable
,Map<K,V>
,Get<K,V>
,IterableGet<K,V>
,IterableMap<K,V>
,Put<K,V>
- Direct Known Subclasses:
LazySortedMap
public class LazyMap<K,V> extends AbstractMapDecorator<K,V> implements Serializable
Decorates anotherMap
to create objects in the map on demand.When the
get(Object)
method is called with a key that does not exist in the map, the factory is used to create the object. The created object will be added to the map using the requested key.For instance:
Factory<Date> factory = new Factory<Date>() { public Date create() { return new Date(); } } Map<String, Date> lazy = LazyMap.lazyMap(new HashMap<String, Date>(), factory); Date date = lazy.get("NOW");
After the above code is executed,date
will refer to a newDate
instance. Furthermore, thatDate
instance is mapped to the "NOW" key in the map.Note that LazyMap is not synchronized and is not thread-safe. If you wish to use this map from multiple threads concurrently, you must use appropriate synchronization. The simplest approach is to wrap this map using
Collections.synchronizedMap(Map)
. This class may throw exceptions when accessed by concurrent threads without synchronization.This class is Serializable from Commons Collections 3.1.
- Since:
- 3.0
- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description protected Transformer<? super K,? extends V>
factory
The factory to use to construct elements
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description V
get(Object key)
static <K,V>
LazyMap<K,V>lazyMap(Map<K,V> map, Factory<? extends V> factory)
Factory method to create a lazily instantiated map.static <V,K>
LazyMap<K,V>lazyMap(Map<K,V> map, Transformer<? super K,? extends V> factory)
Factory method to create a lazily instantiated map.-
Methods inherited from class org.apache.commons.collections4.map.AbstractMapDecorator
clear, containsKey, containsValue, decorated, entrySet, equals, hashCode, isEmpty, keySet, put, putAll, remove, size, toString, values
-
Methods inherited from class org.apache.commons.collections4.map.AbstractIterableMap
mapIterator
-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface java.util.Map
compute, computeIfAbsent, computeIfPresent, forEach, getOrDefault, merge, putIfAbsent, remove, replace, replace, replaceAll
-
-
-
-
Field Detail
-
factory
protected final Transformer<? super K,? extends V> factory
The factory to use to construct elements
-
-
Constructor Detail
-
LazyMap
protected LazyMap(Map<K,V> map, Factory<? extends V> factory)
Constructor that wraps (not copies).- Parameters:
map
- the map to decorate, must not be nullfactory
- the factory to use, must not be null- Throws:
NullPointerException
- if map or factory is null
-
LazyMap
protected LazyMap(Map<K,V> map, Transformer<? super K,? extends V> factory)
Constructor that wraps (not copies).- Parameters:
map
- the map to decorate, must not be nullfactory
- the factory to use, must not be null- Throws:
NullPointerException
- if map or factory is null
-
-
Method Detail
-
lazyMap
public static <K,V> LazyMap<K,V> lazyMap(Map<K,V> map, Factory<? extends V> factory)
Factory method to create a lazily instantiated map.- Type Parameters:
K
- the key typeV
- the value type- Parameters:
map
- the map to decorate, must not be nullfactory
- the factory to use, must not be null- Returns:
- a new lazy map
- Throws:
NullPointerException
- if map or factory is null- Since:
- 4.0
-
lazyMap
public static <V,K> LazyMap<K,V> lazyMap(Map<K,V> map, Transformer<? super K,? extends V> factory)
Factory method to create a lazily instantiated map.- Type Parameters:
K
- the key typeV
- the value type- Parameters:
map
- the map to decorate, must not be nullfactory
- the factory to use, must not be null- Returns:
- a new lazy map
- Throws:
NullPointerException
- if map or factory is null- Since:
- 4.0
-
get
public V get(Object key)
- Specified by:
get
in interfaceGet<K,V>
- Specified by:
get
in interfaceMap<K,V>
- Overrides:
get
in classAbstractMapDecorator<K,V>
- Parameters:
key
- the key whose associated value is to be returned- Returns:
- the value to which the specified key is mapped, or
null
if this map contains no mapping for the key - See Also:
Map.get(Object)
-
-