Class AbstractMultiValuedMap<K,V>
- Type Parameters:
K
- the type of the keys in this mapV
- the type of the values in this map
- All Implemented Interfaces:
MultiValuedMap<K,
V>
- Direct Known Subclasses:
AbstractListValuedMap
,AbstractSetValuedMap
MultiValuedMap
interface to simplify
the creation of subclass implementations.
Subclasses specify a Map implementation to use as the internal storage.
- Since:
- 4.1
-
Constructor Summary
ModifierConstructorDescriptionprotected
Constructor needed for subclass serialisation.protected
AbstractMultiValuedMap
(Map<K, ? extends Collection<V>> map) Constructor that wraps (not copies). -
Method Summary
Modifier and TypeMethodDescriptionMap
<K, Collection<V>> asMap()
Returns a view of this multivalued map as aMap
from each distinct key to the non-empty collection of that key's associated values.void
clear()
Removes all of the mappings from this map (optional operation).boolean
containsKey
(Object key) Returnstrue
if this map contains a mapping for the specified key.boolean
containsMapping
(Object key, Object value) Checks whether the map contains a mapping for the specified key and value.boolean
containsValue
(Object value) Checks whether the map contains at least one mapping for the specified value.protected abstract Collection
<V> Creates a new Collection typed for a given subclass.protected void
Read the map in using a custom routine.protected void
Write the map out using a custom routine.entries()
Returns aCollection
view of the mappings contained in this multivalued map.boolean
Gets the collection of values associated with the specified key.protected Map
<K, ? extends Collection<V>> getMap()
Gets the map being wrapped.int
hashCode()
boolean
isEmpty()
Returnstrue
if this map contains no key-value mappings.keys()
Returns aMultiSet
view of the key mapping contained in this map.keySet()
Returns aSet
view of the keys contained in this multivalued map.Obtains aMapIterator
over this multivalued map.boolean
Adds the value to the collection associated with the specified key.boolean
Copies all of the mappings from the specified map to this map.boolean
Adds Iterable values to the collection associated with the specified key.boolean
putAll
(MultiValuedMap<? extends K, ? extends V> map) Copies all of the mappings from the specified MultiValuedMap to this map.Removes all values associated with the specified key.boolean
removeMapping
(Object key, Object value) Removes a specific key/value mapping from the multivalued map.protected void
setMap
(Map<K, ? extends Collection<V>> map) Sets the map being wrapped.int
size()
Gets the total size of the map.toString()
values()
Gets a collection containing all the values in the map.
-
Constructor Details
-
AbstractMultiValuedMap
protected AbstractMultiValuedMap()Constructor needed for subclass serialisation. -
AbstractMultiValuedMap
Constructor that wraps (not copies).- Parameters:
map
- the map to wrap, must not be null- Throws:
NullPointerException
- if the map is null
-
-
Method Details
-
asMap
Description copied from interface:MultiValuedMap
Returns a view of this multivalued map as aMap
from each distinct key to the non-empty collection of that key's associated values.Note that
this.asMap().get(k)
is equivalent tothis.get(k)
only whenk
is a key contained in the multivalued map; otherwise it returnsnull
as opposed to an empty collection.Changes to the returned map or the collections that serve as its values will update the underlying multivalued map, and vice versa. The map does not support
put
orputAll
, nor do its entries supportsetValue
.- Specified by:
asMap
in interfaceMultiValuedMap<K,
V> - Returns:
- a map view of the mappings in this multivalued map
-
clear
Description copied from interface:MultiValuedMap
Removes all of the mappings from this map (optional operation).The map will be empty after this call returns.
- Specified by:
clear
in interfaceMultiValuedMap<K,
V>
-
containsKey
Description copied from interface:MultiValuedMap
Returnstrue
if this map contains a mapping for the specified key. More formally, returnstrue
if and only if this map contains a mapping for a keyk
such that(key==null ? k==null : key.equals(k))
. (There can be at most one such mapping.)- Specified by:
containsKey
in interfaceMultiValuedMap<K,
V> - Parameters:
key
- key whose presence in this map is to be tested- Returns:
- true if this map contains a mapping for the specified key
-
containsMapping
Description copied from interface:MultiValuedMap
Checks whether the map contains a mapping for the specified key and value.- Specified by:
containsMapping
in interfaceMultiValuedMap<K,
V> - Parameters:
key
- the key to search forvalue
- the value to search for- Returns:
- true if the map contains the value
-
containsValue
Description copied from interface:MultiValuedMap
Checks whether the map contains at least one mapping for the specified value.- Specified by:
containsValue
in interfaceMultiValuedMap<K,
V> - Parameters:
value
- the value to search for- Returns:
- true if the map contains the value
-
createCollection
Creates a new Collection typed for a given subclass.- Returns:
- a new Collection typed for a given subclass.
-
doReadObject
Read the map in using a custom routine.- Parameters:
in
- the input stream- Throws:
IOException
- any of the usual I/O related exceptionsClassNotFoundException
- if the stream contains an object which class cannot be loadedClassCastException
- if the stream does not contain the correct objects
-
doWriteObject
Write the map out using a custom routine.- Parameters:
out
- the output stream- Throws:
IOException
- any of the usual I/O related exceptions
-
entries
Description copied from interface:MultiValuedMap
Returns aCollection
view of the mappings contained in this multivalued map.The collection is backed by the map, so changes to the map are reflected in the collection, and vice-versa.
- Specified by:
entries
in interfaceMultiValuedMap<K,
V> - Returns:
- a set view of the mappings contained in this map
-
equals
-
get
Gets the collection of values associated with the specified key. This would return an empty collection in case the mapping is not present- Specified by:
get
in interfaceMultiValuedMap<K,
V> - Parameters:
key
- the key to retrieve- Returns:
- the
Collection
of values, will return an emptyCollection
for no mapping
-
getMap
Gets the map being wrapped.- Returns:
- the wrapped map
-
hashCode
-
isEmpty
Description copied from interface:MultiValuedMap
Returnstrue
if this map contains no key-value mappings.- Specified by:
isEmpty
in interfaceMultiValuedMap<K,
V> - Returns:
true
if this map contains no key-value mappings
-
keys
Returns aMultiSet
view of the key mapping contained in this map.Returns a MultiSet of keys with its values count as the count of the MultiSet. This multiset is backed by the map, so any changes in the map is reflected here. Any method which modifies this multiset like
add
,remove
,Iterator.remove()
etc throwsUnsupportedOperationException
.- Specified by:
keys
in interfaceMultiValuedMap<K,
V> - Returns:
- a bag view of the key mapping contained in this map
-
keySet
Description copied from interface:MultiValuedMap
Returns aSet
view of the keys contained in this multivalued map.The set is backed by the map, so changes to the map are reflected in the set, and vice-versa.
If the map is modified while an iteration over the set is in progress (except through the iterator's own
remove
operation), the result of the iteration is undefined. The set supports element removal, which removes the corresponding mapping from the map, via theIterator.remove
,Set.remove
,removeAll
,retainAll
, andclear
operations. It does not support theadd
oraddAll
operations.- Specified by:
keySet
in interfaceMultiValuedMap<K,
V> - Returns:
- a set view of the keys contained in this map
-
mapIterator
Description copied from interface:MultiValuedMap
Obtains aMapIterator
over this multivalued map.A map iterator is an efficient way of iterating over maps. There is no need to access the entries collection or use
Map.Entry
objects.- Specified by:
mapIterator
in interfaceMultiValuedMap<K,
V> - Returns:
- a map iterator
-
put
Adds the value to the collection associated with the specified key.Unlike a normal
Map
the previous value is not replaced. Instead the new value is added to the collection stored against the key.- Specified by:
put
in interfaceMultiValuedMap<K,
V> - Parameters:
key
- the key to store againstvalue
- the value to add to the collection at the key- Returns:
- the value added if the map changed and null if the map did not change
-
putAll
Adds Iterable values to the collection associated with the specified key.- Specified by:
putAll
in interfaceMultiValuedMap<K,
V> - Parameters:
key
- the key to store againstvalues
- the values to add to the collection at the key, may not be null- Returns:
- true if this map changed
- Throws:
NullPointerException
- if values is null
-
putAll
Copies all of the mappings from the specified map to this map. The effect of this call is equivalent to that of callingput(k, v)
on this map once for each mapping from keyk
to valuev
in the specified map. The behavior of this operation is undefined if the specified map is modified while the operation is in progress.- Specified by:
putAll
in interfaceMultiValuedMap<K,
V> - Parameters:
map
- mappings to be stored in this map, may not be null- Returns:
- true if the map changed as a result of this operation
- Throws:
NullPointerException
- if map is null
-
putAll
Copies all of the mappings from the specified MultiValuedMap to this map. The effect of this call is equivalent to that of callingput(k, v)
on this map once for each mapping from keyk
to valuev
in the specified map. The behavior of this operation is undefined if the specified map is modified while the operation is in progress.- Specified by:
putAll
in interfaceMultiValuedMap<K,
V> - Parameters:
map
- mappings to be stored in this map, may not be null- Returns:
- true if the map changed as a result of this operation
- Throws:
NullPointerException
- if map is null
-
remove
Removes all values associated with the specified key.A subsequent
get(Object)
would return an empty collection.- Specified by:
remove
in interfaceMultiValuedMap<K,
V> - Parameters:
key
- the key to remove values from- Returns:
- the
Collection
of values removed, will return an empty, unmodifiable collection for no mapping found
-
removeMapping
Removes a specific key/value mapping from the multivalued map.The value is removed from the collection mapped to the specified key. Other values attached to that key are unaffected.
If the last value for a key is removed, an empty collection would be returned from a subsequent
get(Object)
.- Specified by:
removeMapping
in interfaceMultiValuedMap<K,
V> - Parameters:
key
- the key to remove fromvalue
- the value to remove- Returns:
- true if the mapping was removed, false otherwise
-
setMap
Sets the map being wrapped.NOTE: this method should only be used during deserialization
- Parameters:
map
- the map to wrap
-
size
Gets the total size of the map.Implementations would return the total size of the map which is the count of the values from all keys.
This implementation does not cache the total size of the multivalued map, but rather calculates it by iterating over the entries of the underlying map.
- Specified by:
size
in interfaceMultiValuedMap<K,
V> - Returns:
- the total size of the map
-
toString
-
values
Gets a collection containing all the values in the map.Returns a collection containing all the values from all keys.
- Specified by:
values
in interfaceMultiValuedMap<K,
V> - Returns:
- a collection view of the values contained in this map
-