@GwtCompatible(emulated=true) public abstract class ImmutableMultimap<K,V> extends Object implements Serializable
A Multimap
whose contents will never change, with many other important properties detailed at ImmutableCollection
.
Warning: avoid direct usage of ImmutableMultimap
as a type (as with Multimap
itself). Prefer subtypes such as ImmutableSetMultimap
or ImmutableListMultimap
, which have well-defined equals(java.lang.Object)
semantics, thus avoiding a common source of bugs and confusion.
Note: every ImmutableMultimap
offers an inverse()
view, so there is no need for a distinct ImmutableBiMultimap
type.
Key-grouped iteration. All view collections follow the same iteration order. In all current implementations, the iteration order always keeps multiple entries with the same key together. Any creation method that would customarily respect insertion order (such as copyOf(Multimap)
) instead preserves key-grouped order by inserting entries for an existing key immediately after the last entry having that key.
See the Guava User Guide article on immutable collections.
Modifier and Type | Class and Description |
---|---|
static class |
ImmutableMultimap.Builder<K,V>
A builder for creating immutable multimap instances, especially
public static final multimaps (“constant multimaps”). |
Modifier and Type | Method and Description |
---|---|
ImmutableMap<K,Collection<V>> |
asMap()
Returns an immutable map that associates each key with its corresponding values in the multimap.
|
static <K,V> ImmutableMultimap.Builder<K,V> |
builder()
Returns a new builder.
|
void |
clear()
Deprecated.
Unsupported operation.
|
boolean |
containsEntry(Object key,
Object value)
Returns
true if this multimap contains at least one key-value pair with the key key and the value value . |
boolean |
containsKey(Object key)
Returns
true if this multimap contains at least one key-value pair with the key key . |
boolean |
containsValue(Object value)
Returns
true if this multimap contains at least one key-value pair with the value value . |
static <K,V> ImmutableMultimap<K,V> |
copyOf(Iterable<? extends Map.Entry<? extends K,? extends V>> entries)
Returns an immutable multimap containing the specified entries.
|
static <K,V> ImmutableMultimap<K,V> |
copyOf(Multimap<? extends K,? extends V> multimap)
Returns an immutable multimap containing the same mappings as
multimap , in the “key-grouped” iteration order described in the class documentation. |
ImmutableCollection<Map.Entry<K,V>> |
entries()
Returns an immutable collection of all key-value pairs in the multimap.
|
boolean |
equals(Object object)
Compares the specified object with this multimap for equality.
|
abstract ImmutableCollection<V> |
get(K key)
Returns an immutable collection of the values for the given key.
|
int |
hashCode()
Returns the hash code for this multimap.
|
abstract ImmutableMultimap<V,K> |
inverse()
Returns an immutable multimap which is the inverse of this one.
|
boolean |
isEmpty()
Returns
true if this multimap contains no key-value pairs. |
ImmutableMultiset<K> |
keys()
Returns an immutable multiset containing all the keys in this multimap, in the same order and with the same frequencies as they appear in this multimap; to get only a single occurrence of each key, use
keySet() . |
ImmutableSet<K> |
keySet()
Returns an immutable set of the distinct keys in this multimap, in the same order as they appear in this multimap.
|
static <K,V> ImmutableMultimap<K,V> |
of()
Returns an empty multimap.
|
static <K,V> ImmutableMultimap<K,V> |
of(K k1,
V v1)
Returns an immutable multimap containing a single entry.
|
static <K,V> ImmutableMultimap<K,V> |
of(K k1,
V v1,
K k2,
V v2)
Returns an immutable multimap containing the given entries, in order.
|
static <K,V> ImmutableMultimap<K,V> |
of(K k1,
V v1,
K k2,
V v2,
K k3,
V v3)
Returns an immutable multimap containing the given entries, in the “key-grouped” insertion order described in the class documentation.
|
static <K,V> ImmutableMultimap<K,V> |
of(K k1,
V v1,
K k2,
V v2,
K k3,
V v3,
K k4,
V v4)
Returns an immutable multimap containing the given entries, in the “key-grouped” insertion order described in the class documentation.
|
static <K,V> ImmutableMultimap<K,V> |
of(K k1,
V v1,
K k2,
V v2,
K k3,
V v3,
K k4,
V v4,
K k5,
V v5)
Returns an immutable multimap containing the given entries, in the “key-grouped” insertion order described in the class documentation.
|
boolean |
put(K key,
V value)
Deprecated.
Unsupported operation.
|
boolean |
putAll(K key,
Iterable<? extends V> values)
Deprecated.
Unsupported operation.
|
boolean |
putAll(Multimap<? extends K,? extends V> multimap)
Deprecated.
Unsupported operation.
|
boolean |
remove(Object key,
Object value)
Deprecated.
Unsupported operation.
|
ImmutableCollection<V> |
removeAll(Object key)
Deprecated.
Unsupported operation.
|
ImmutableCollection<V> |
replaceValues(K key,
Iterable<? extends V> values)
Deprecated.
Unsupported operation.
|
int |
size()
Returns the number of key-value pairs in this multimap.
|
String |
toString()
Returns a string representation of the multimap, generated by calling
toString on the map returned by Multimap.asMap() . |
ImmutableCollection<V> |
values()
Returns an immutable collection of the values in this multimap.
|
public static <K,V> ImmutableMultimap<K,V> of()
Returns an empty multimap.
public static <K,V> ImmutableMultimap<K,V> of(K k1, V v1)
Returns an immutable multimap containing a single entry.
public static <K,V> ImmutableMultimap<K,V> of(K k1, V v1, K k2, V v2)
Returns an immutable multimap containing the given entries, in order.
public static <K,V> ImmutableMultimap<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3)
Returns an immutable multimap containing the given entries, in the “key-grouped” insertion order described in the class documentation.
public static <K,V> ImmutableMultimap<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4)
Returns an immutable multimap containing the given entries, in the “key-grouped” insertion order described in the class documentation.
public static <K,V> ImmutableMultimap<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5)
Returns an immutable multimap containing the given entries, in the “key-grouped” insertion order described in the class documentation.
public static <K,V> ImmutableMultimap.Builder<K,V> builder()
Returns a new builder. The generated builder is equivalent to the builder created by the ImmutableMultimap.Builder
constructor.
public static <K,V> ImmutableMultimap<K,V> copyOf(Multimap<? extends K,? extends V> multimap)
Returns an immutable multimap containing the same mappings as multimap
, in the “key-grouped” iteration order described in the class documentation.
Despite the method name, this method attempts to avoid actually copying the data when it is safe to do so. The exact circumstances under which a copy will or will not be performed are undocumented and subject to change.
NullPointerException
- if any key or value in multimap
is null@Beta public static <K,V> ImmutableMultimap<K,V> copyOf(Iterable<? extends Map.Entry<? extends K,? extends V>> entries)
Returns an immutable multimap containing the specified entries. The returned multimap iterates over keys in the order they were first encountered in the input, and the values for each key are iterated in the order they were encountered.
NullPointerException
- if any key, value, or entry is null@Deprecated public ImmutableCollection<V> removeAll(Object key)
Guaranteed to throw an exception and leave the multimap unmodified.
removeAll
in interface Multimap<K,V>
UnsupportedOperationException
- always@Deprecated public ImmutableCollection<V> replaceValues(K key, Iterable<? extends V> values)
Guaranteed to throw an exception and leave the multimap unmodified.
replaceValues
in interface Multimap<K,V>
UnsupportedOperationException
- always@Deprecated public void clear()
Guaranteed to throw an exception and leave the multimap unmodified.
clear
in interface Multimap<K,V>
UnsupportedOperationException
- alwayspublic abstract ImmutableCollection<V> get(K key)
Returns an immutable collection of the values for the given key. If no mappings in the multimap have the provided key, an empty immutable collection is returned. The values are in the same order as the parameters used to build this multimap.
public abstract ImmutableMultimap<V,K> inverse()
Returns an immutable multimap which is the inverse of this one. For every key-value mapping in the original, the result will have a mapping with key and value reversed.
@Deprecated public boolean put(K key, V value)
Guaranteed to throw an exception and leave the multimap unmodified.
put
in interface Multimap<K,V>
true
if the method increased the size of the multimap, or false
if the multimap already contained the key-value pair and doesn’t allow duplicatesUnsupportedOperationException
- always@Deprecated public boolean putAll(K key, Iterable<? extends V> values)
Guaranteed to throw an exception and leave the multimap unmodified.
putAll
in interface Multimap<K,V>
true
if the multimap changedUnsupportedOperationException
- always@Deprecated public boolean putAll(Multimap<? extends K,? extends V> multimap)
Guaranteed to throw an exception and leave the multimap unmodified.
putAll
in interface Multimap<K,V>
true
if the multimap changedUnsupportedOperationException
- always@Deprecated public boolean remove(Object key, Object value)
Guaranteed to throw an exception and leave the multimap unmodified.
remove
in interface Multimap<K,V>
true
if the multimap changedUnsupportedOperationException
- alwayspublic boolean containsKey(@Nullable Object key)
Multimap
Returns true
if this multimap contains at least one key-value pair with the key key
.
containsKey
in interface Multimap<K,V>
public boolean containsValue(@Nullable Object value)
Multimap
Returns true
if this multimap contains at least one key-value pair with the value value
.
containsValue
in interface Multimap<K,V>
public int size()
Multimap
Returns the number of key-value pairs in this multimap.
Note: this method does not return the number of distinct keys in the multimap, which is given by keySet().size()
or asMap().size()
. See the opening section of the Multimap
class documentation for clarification.
public ImmutableSet<K> keySet()
Returns an immutable set of the distinct keys in this multimap, in the same order as they appear in this multimap.
public ImmutableMap<K,Collection<V>> asMap()
Returns an immutable map that associates each key with its corresponding values in the multimap. Keys and values appear in the same order as in this multimap.
public ImmutableCollection<Map.Entry<K,V>> entries()
Returns an immutable collection of all key-value pairs in the multimap.
public ImmutableMultiset<K> keys()
Returns an immutable multiset containing all the keys in this multimap, in the same order and with the same frequencies as they appear in this multimap; to get only a single occurrence of each key, use keySet()
.
public ImmutableCollection<V> values()
Returns an immutable collection of the values in this multimap. Its iterator traverses the values for the first key, the values for the second key, and so on.
public boolean isEmpty()
Multimap
Returns true
if this multimap contains no key-value pairs. Equivalent to size() == 0
, but can in some cases be more efficient.
public boolean containsEntry(@Nullable Object key, @Nullable Object value)
Multimap
Returns true
if this multimap contains at least one key-value pair with the key key
and the value value
.
containsEntry
in interface Multimap<K,V>
public boolean equals(@Nullable Object object)
Multimap
Compares the specified object with this multimap for equality. Two multimaps are equal when their map views, as returned by Multimap.asMap()
, are also equal.
In general, two multimaps with identical key-value mappings may or may not be equal, depending on the implementation. For example, two SetMultimap
instances with the same key-value mappings are equal, but equality of two ListMultimap
instances depends on the ordering of the values for each key.
A non-empty SetMultimap
cannot be equal to a non-empty ListMultimap
, since their Multimap.asMap()
views contain unequal collections as values. However, any two empty multimaps are equal, because they both have empty Multimap.asMap()
views.
public int hashCode()
The hash code of a multimap is defined as the hash code of the map view,
as returned by Multimap.asMap()
.
public String toString()
toString
on the map returned by Multimap.asMap()
.