|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object com.google.common.collect.Multimaps
public final class Multimaps
Provides static methods acting on or generating a Multimap
.
Method Summary | ||
---|---|---|
static
|
forMap(Map<K,V> map)
Returns a multimap view of the specified map. |
|
static
|
index(Iterable<V> values,
Function<? super V,K> keyFunction)
Creates an index ImmutableMultimap that contains the results of
applying a specified function to each item in an Iterable of
values. |
|
static
|
invertFrom(Multimap<? extends V,? extends K> source,
M dest)
Copies each key-value mapping in source into dest , with
its key and value reversed. |
|
static
|
newListMultimap(Map<K,Collection<V>> map,
Supplier<? extends List<V>> factory)
Creates a new ListMultimap that uses the provided map and factory. |
|
static
|
newMultimap(Map<K,Collection<V>> map,
Supplier<? extends Collection<V>> factory)
Creates a new Multimap that uses the provided map and factory. |
|
static
|
newSetMultimap(Map<K,Collection<V>> map,
Supplier<? extends Set<V>> factory)
Creates a new SetMultimap that uses the provided map and factory. |
|
static
|
newSortedSetMultimap(Map<K,Collection<V>> map,
Supplier<? extends SortedSet<V>> factory)
Creates a new SortedSetMultimap that uses the provided map and
factory. |
|
static
|
synchronizedListMultimap(ListMultimap<K,V> multimap)
Returns a synchronized (thread-safe) ListMultimap backed by the
specified multimap. |
|
static
|
synchronizedMultimap(Multimap<K,V> multimap)
Returns a synchronized (thread-safe) multimap backed by the specified multimap. |
|
static
|
synchronizedSetMultimap(SetMultimap<K,V> multimap)
Returns a synchronized (thread-safe) SetMultimap backed by the
specified multimap. |
|
static
|
synchronizedSortedSetMultimap(SortedSetMultimap<K,V> multimap)
Returns a synchronized (thread-safe) SortedSetMultimap backed by
the specified multimap. |
|
static
|
unmodifiableListMultimap(ListMultimap<K,V> delegate)
Returns an unmodifiable view of the specified ListMultimap . |
|
static
|
unmodifiableMultimap(Multimap<K,V> delegate)
Returns an unmodifiable view of the specified multimap. |
|
static
|
unmodifiableSetMultimap(SetMultimap<K,V> delegate)
Returns an unmodifiable view of the specified SetMultimap . |
|
static
|
unmodifiableSortedSetMultimap(SortedSetMultimap<K,V> delegate)
Returns an unmodifiable view of the specified SortedSetMultimap . |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Method Detail |
---|
public static <K,V> Multimap<K,V> newMultimap(Map<K,Collection<V>> map, Supplier<? extends Collection<V>> factory)
Multimap
that uses the provided map and factory. It
can generate a multimap based on arbitrary Map
and
Collection
classes.
The factory
-generated and map
classes determine the
multimap iteration order. They also specify the behavior of the
equals
, hashCode
, and toString
methods for the
multimap and its returned views. However, the multimap's get
method returns instances of a different class than factory.get()
does.
The multimap is serializable if map
, factory
, the
collections generated by factory
, and the multimap contents are all
serializable.
The multimap is not threadsafe when any concurrent operations update the
multimap, even if map
and the instances generated by
factory
are. Concurrent read operations will work correctly. To
allow concurrent update operations, wrap the multimap with a call to
synchronizedMultimap(com.google.common.collect.Multimap
.
Call this method only when the simpler methods
ArrayListMultimap.create()
, HashMultimap.create()
,
LinkedHashMultimap.create()
, LinkedListMultimap.create()
,
TreeMultimap.create()
, and
TreeMultimap.create(Comparator, Comparator)
won't suffice.
Note: the multimap assumes complete ownership over of map
and
the collections returned by factory
. Those objects should not be
manually updated and they should not use soft, weak, or phantom references.
map
- place to store the mapping from each key to its corresponding
valuesfactory
- supplier of new, empty collections that will each hold all
values for a given key
IllegalArgumentException
- if map
is not emptypublic static <K,V> ListMultimap<K,V> newListMultimap(Map<K,Collection<V>> map, Supplier<? extends List<V>> factory)
ListMultimap
that uses the provided map and factory.
It can generate a multimap based on arbitrary Map
and List
classes.
The factory
-generated and map
classes determine the
multimap iteration order. They also specify the behavior of the
equals
, hashCode
, and toString
methods for the
multimap and its returned views. The multimap's get
, removeAll
, and replaceValues
methods return RandomAccess
lists if the factory does. However, the multimap's get
method
returns instances of a different class than does factory.get()
.
The multimap is serializable if map
, factory
, the
lists generated by factory
, and the multimap contents are all
serializable.
The multimap is not threadsafe when any concurrent operations update the
multimap, even if map
and the instances generated by
factory
are. Concurrent read operations will work correctly. To
allow concurrent update operations, wrap the multimap with a call to
synchronizedListMultimap(com.google.common.collect.ListMultimap
.
Call this method only when the simpler methods
ArrayListMultimap.create()
and LinkedListMultimap.create()
won't suffice.
Note: the multimap assumes complete ownership over of map
and
the lists returned by factory
. Those objects should not be manually
updated and they should not use soft, weak, or phantom references.
map
- place to store the mapping from each key to its corresponding
valuesfactory
- supplier of new, empty lists that will each hold all values
for a given key
IllegalArgumentException
- if map
is not emptypublic static <K,V> SetMultimap<K,V> newSetMultimap(Map<K,Collection<V>> map, Supplier<? extends Set<V>> factory)
SetMultimap
that uses the provided map and factory.
It can generate a multimap based on arbitrary Map
and Set
classes.
The factory
-generated and map
classes determine the
multimap iteration order. They also specify the behavior of the
equals
, hashCode
, and toString
methods for the
multimap and its returned views. However, the multimap's get
method returns instances of a different class than factory.get()
does.
The multimap is serializable if map
, factory
, the
sets generated by factory
, and the multimap contents are all
serializable.
The multimap is not threadsafe when any concurrent operations update the
multimap, even if map
and the instances generated by
factory
are. Concurrent read operations will work correctly. To
allow concurrent update operations, wrap the multimap with a call to
synchronizedSetMultimap(com.google.common.collect.SetMultimap
.
Call this method only when the simpler methods
HashMultimap.create()
, LinkedHashMultimap.create()
,
TreeMultimap.create()
, and
TreeMultimap.create(Comparator, Comparator)
won't suffice.
Note: the multimap assumes complete ownership over of map
and
the sets returned by factory
. Those objects should not be manually
updated and they should not use soft, weak, or phantom references.
map
- place to store the mapping from each key to its corresponding
valuesfactory
- supplier of new, empty sets that will each hold all values
for a given key
IllegalArgumentException
- if map
is not emptypublic static <K,V> SortedSetMultimap<K,V> newSortedSetMultimap(Map<K,Collection<V>> map, Supplier<? extends SortedSet<V>> factory)
SortedSetMultimap
that uses the provided map and
factory. It can generate a multimap based on arbitrary Map
and
SortedSet
classes.
The factory
-generated and map
classes determine the
multimap iteration order. They also specify the behavior of the
equals
, hashCode
, and toString
methods for the
multimap and its returned views. However, the multimap's get
method returns instances of a different class than factory.get()
does.
The multimap is serializable if map
, factory
, the
sets generated by factory
, and the multimap contents are all
serializable.
The multimap is not threadsafe when any concurrent operations update the
multimap, even if map
and the instances generated by
factory
are. Concurrent read operations will work correctly. To
allow concurrent update operations, wrap the multimap with a call to
synchronizedSortedSetMultimap(com.google.common.collect.SortedSetMultimap
.
Call this method only when the simpler methods
TreeMultimap.create()
and
TreeMultimap.create(Comparator, Comparator)
won't suffice.
Note: the multimap assumes complete ownership over of map
and
the sets returned by factory
. Those objects should not be manually
updated and they should not use soft, weak, or phantom references.
map
- place to store the mapping from each key to its corresponding
valuesfactory
- supplier of new, empty sorted sets that will each hold
all values for a given key
IllegalArgumentException
- if map
is not emptypublic static <K,V,M extends Multimap<K,V>> M invertFrom(Multimap<? extends V,? extends K> source, M dest)
source
into dest
, with
its key and value reversed.
source
- any multimapdest
- the multimap to copy into; usually empty
dest
public static <K,V> Multimap<K,V> synchronizedMultimap(Multimap<K,V> multimap)
It is imperative that the user manually synchronize on the returned multimap when accessing any of its collection views:
Multimap<K, V> m = Multimaps.synchronizedMultimap(
HashMultimap.<K, V>create());
...
Set<K> s = m.keySet(); // Needn't be in synchronized block
...
synchronized (m) { // Synchronizing on m, not s!
Iterator<K> i = s.iterator(); // Must be in synchronized block
while (i.hasNext()) {
foo(i.next());
}
}
Failure to follow this advice may result in non-deterministic behavior.
Note that the generated multimap's Multimap.removeAll(java.lang.Object)
and
Multimap.replaceValues(K, java.lang.Iterable extends V>)
methods return collections that aren't
synchronized.
The returned multimap will be serializable if the specified multimap is serializable.
multimap
- the multimap to be wrapped in a synchronized view
public static <K,V> Multimap<K,V> unmodifiableMultimap(Multimap<K,V> delegate)
UnsupportedOperationException
.
Note that the generated multimap's Multimap.removeAll(java.lang.Object)
and
Multimap.replaceValues(K, java.lang.Iterable extends V>)
methods return collections that are
modifiable.
The returned multimap will be serializable if the specified multimap is serializable.
delegate
- the multimap for which an unmodifiable view is to be
returned
public static <K,V> SetMultimap<K,V> synchronizedSetMultimap(SetMultimap<K,V> multimap)
SetMultimap
backed by the
specified multimap.
You must follow the warnings described in synchronizedMultimap(com.google.common.collect.Multimap
.
The returned multimap will be serializable if the specified multimap is serializable.
multimap
- the multimap to be wrapped
public static <K,V> SetMultimap<K,V> unmodifiableSetMultimap(SetMultimap<K,V> delegate)
SetMultimap
. Query
operations on the returned multimap "read through" to the specified
multimap, and attempts to modify the returned multimap, either directly or
through the multimap's views, result in an
UnsupportedOperationException
.
Note that the generated multimap's Multimap.removeAll(java.lang.Object)
and
Multimap.replaceValues(K, java.lang.Iterable extends V>)
methods return collections that are
modifiable.
The returned multimap will be serializable if the specified multimap is serializable.
delegate
- the multimap for which an unmodifiable view is to be
returned
public static <K,V> SortedSetMultimap<K,V> synchronizedSortedSetMultimap(SortedSetMultimap<K,V> multimap)
SortedSetMultimap
backed by
the specified multimap.
You must follow the warnings described in synchronizedMultimap(com.google.common.collect.Multimap
.
The returned multimap will be serializable if the specified multimap is serializable.
multimap
- the multimap to be wrapped
public static <K,V> SortedSetMultimap<K,V> unmodifiableSortedSetMultimap(SortedSetMultimap<K,V> delegate)
SortedSetMultimap
.
Query operations on the returned multimap "read through" to the specified
multimap, and attempts to modify the returned multimap, either directly or
through the multimap's views, result in an
UnsupportedOperationException
.
Note that the generated multimap's Multimap.removeAll(java.lang.Object)
and
Multimap.replaceValues(K, java.lang.Iterable extends V>)
methods return collections that are
modifiable.
The returned multimap will be serializable if the specified multimap is serializable.
delegate
- the multimap for which an unmodifiable view is to be
returned
public static <K,V> ListMultimap<K,V> synchronizedListMultimap(ListMultimap<K,V> multimap)
ListMultimap
backed by the
specified multimap.
You must follow the warnings described in synchronizedMultimap(com.google.common.collect.Multimap
.
multimap
- the multimap to be wrapped
public static <K,V> ListMultimap<K,V> unmodifiableListMultimap(ListMultimap<K,V> delegate)
ListMultimap
. Query
operations on the returned multimap "read through" to the specified
multimap, and attempts to modify the returned multimap, either directly or
through the multimap's views, result in an
UnsupportedOperationException
.
Note that the generated multimap's Multimap.removeAll(java.lang.Object)
and
Multimap.replaceValues(K, java.lang.Iterable extends V>)
methods return collections that are
modifiable.
The returned multimap will be serializable if the specified multimap is serializable.
delegate
- the multimap for which an unmodifiable view is to be
returned
public static <K,V> SetMultimap<K,V> forMap(Map<K,V> map)
remove
operation, or through the setValue
operation on a map entry
returned by the iterator), the results of the iteration are undefined.
The multimap supports mapping removal, which removes the corresponding
mapping from the map. It does not support any operations which might add
mappings, such as put
, putAll
or replaceValues
.
The returned multimap will be serializable if the specified map is serializable.
map
- the backing map for the returned multimap viewpublic static <K,V> ImmutableListMultimap<K,V> index(Iterable<V> values, Function<? super V,K> keyFunction)
ImmutableMultimap
that contains the results of
applying a specified function to each item in an Iterable
of
values. Each value will be stored as a value in the resulting multimap,
yielding a multimap with the same size as the input iterable. The key used
to store that value in the multimap will be the result of calling the
function on that value. The resulting multimap is created as an immutable
snapshot, it does not reflect subsequent changes on the input
iterable.
For example,
List<String> badGuys
= Arrays.asList("Inky", "Blinky", "Pinky", "Pinky", "Clyde");
Function<String, Integer> stringLengthFunction = ...;
Multimap<Integer, String> index
= Multimaps.index(badGuys, stringLengthFunction);
System.out.println(index);
prints {4=[Inky], 5=[Pinky, Pinky, Clyde], 6=[Blinky]}
The returned multimap is serializable if its keys and values are all serializable.
values
- the values to use when constructing the ImmutableMultimap
keyFunction
- the function used to produce the key for each value
ImmutableMultimap
mapping the result of evaluating the
function keyFunction
on each value in the input collection to
that value
NullPointerException
- if any of the following cases is true: values
is null
keyFunction
is null
values
is null
keyFunction
returns null for any element of values
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |