Class ImmutableMap<K,​V>

    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      static class  ImmutableMap.Builder<K,​V>
      A builder for creating immutable map instances, especially public static final maps ("constant maps").
      • Nested classes/interfaces inherited from interface java.util.Map

        Map.Entry<K,​V>
    • Method Detail

      • toImmutableMap

        public static <T,​K,​V> Collector<T,​?,​ImmutableMap<K,​V>> toImmutableMap​(Function<? super T,​? extends K> keyFunction,
                                                                                                            Function<? super T,​? extends V> valueFunction)
        Returns a Collector that accumulates elements into an ImmutableMap whose keys and values are the result of applying the provided mapping functions to the input elements. Entries appear in the result ImmutableMap in encounter order.

        If the mapped keys contain duplicates (according to Object.equals(Object), an IllegalArgumentException is thrown when the collection operation is performed. (This differs from the Collector returned by Collectors.toMap(Function, Function), which throws an IllegalStateException.)

        Since:
        21.0
      • toImmutableMap

        public static <T,​K,​V> Collector<T,​?,​ImmutableMap<K,​V>> toImmutableMap​(Function<? super T,​? extends K> keyFunction,
                                                                                                            Function<? super T,​? extends V> valueFunction,
                                                                                                            BinaryOperator<V> mergeFunction)
        Returns a Collector that accumulates elements into an ImmutableMap whose keys and values are the result of applying the provided mapping functions to the input elements.

        If the mapped keys contain duplicates (according to Object.equals(Object)), the values are merged using the specified merging function. Entries will appear in the encounter order of the first occurrence of the key.

        Since:
        21.0
      • of

        public static <K,​V> ImmutableMap<K,​V> of()
        Returns the empty map. This map behaves and performs comparably to Collections.emptyMap(), and is preferable mainly for consistency and maintainability of your code.

        Performance note: the instance returned is a singleton.

        Type Parameters:
        K - the Map's key type
        V - the Map's value type
        Returns:
        an empty Map
      • of

        public static <K,​V> ImmutableMap<K,​V> of​(K k1,
                                                             V v1)
        Returns an immutable map containing a single entry. This map behaves and performs comparably to Collections.singletonMap(K, V) but will not accept a null key or value. It is preferable mainly for consistency and maintainability of your code.
        Type Parameters:
        K - the Map's key type
        V - the Map's value type
        Parameters:
        k1 - the mapping's key
        v1 - the mapping's value
        Returns:
        a Map containing the specified mapping
      • of

        public static <K,​V> ImmutableMap<K,​V> of​(K k1,
                                                             V v1,
                                                             K k2,
                                                             V v2)
        Returns an immutable map containing the given entries, in order.
        Type Parameters:
        K - the Map's key type
        V - the Map's value type
        Parameters:
        k1 - the first mapping's key
        v1 - the first mapping's value
        k2 - the second mapping's key
        v2 - the second mapping's value
        Returns:
        a Map containing the specified mappings
        Throws:
        IllegalArgumentException - if duplicate keys are provided
      • of

        public static <K,​V> ImmutableMap<K,​V> of​(K k1,
                                                             V v1,
                                                             K k2,
                                                             V v2,
                                                             K k3,
                                                             V v3)
        Returns an immutable map containing the given entries, in order.
        Type Parameters:
        K - the Map's key type
        V - the Map's value type
        Parameters:
        k1 - the first mapping's key
        v1 - the first mapping's value
        k2 - the second mapping's key
        v2 - the second mapping's value
        k3 - the third mapping's key
        v3 - the third mapping's value
        Returns:
        a Map containing the specified mappings
        Throws:
        IllegalArgumentException - if duplicate keys are provided
      • of

        public static <K,​V> ImmutableMap<K,​V> of​(K k1,
                                                             V v1,
                                                             K k2,
                                                             V v2,
                                                             K k3,
                                                             V v3,
                                                             K k4,
                                                             V v4)
        Returns an immutable map containing the given entries, in order.
        Type Parameters:
        K - the Map's key type
        V - the Map's value type
        Parameters:
        k1 - the first mapping's key
        v1 - the first mapping's value
        k2 - the second mapping's key
        v2 - the second mapping's value
        k3 - the third mapping's key
        v3 - the third mapping's value
        k4 - the fourth mapping's key
        v4 - the fourth mapping's value
        Returns:
        a Map containing the specified mappings
        Throws:
        IllegalArgumentException - if duplicate keys are provided
      • of

        public static <K,​V> ImmutableMap<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 map containing the given entries, in order.
        Type Parameters:
        K - the Map's key type
        V - the Map's value type
        Parameters:
        k1 - the first mapping's key
        v1 - the first mapping's value
        k2 - the second mapping's key
        v2 - the second mapping's value
        k3 - the third mapping's key
        v3 - the third mapping's value
        k4 - the fourth mapping's key
        v4 - the fourth mapping's value
        k5 - the fifth mapping's key
        v5 - the fifth mapping's value
        Returns:
        a Map containing the specified mappings
        Throws:
        IllegalArgumentException - if duplicate keys are provided
      • builderWithExpectedSize

        @Beta
        public static <K,​V> ImmutableMap.Builder<K,​V> builderWithExpectedSize​(int expectedSize)
        Returns a new builder, expecting the specified number of entries to be added.

        If expectedSize is exactly the number of entries added to the builder before ImmutableMap.Builder.build() is called, the builder is likely to perform better than an unsized builder() would have.

        It is not specified if any performance benefits apply if expectedSize is close to, but not exactly, the number of entries added to the builder.

        Since:
        23.1
      • copyOf

        public static <K,​V> ImmutableMap<K,​V> copyOf​(Map<? extends K,​? extends V> map)
        Returns an immutable map containing the same entries as map. The returned map iterates over entries in the same order as the entrySet of the original map. If map somehow contains entries with duplicate keys (for example, if it is a SortedMap whose comparator is not consistent with equals), the results of this method are undefined.

        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.

        Type Parameters:
        K - the Map's key type
        V - the Map's value type
        Parameters:
        map - a Map from which entries are drawn, must be non-null
        Returns:
        a Map containing the entries of the given Map
        Throws:
        NullPointerException - if any key or value in map is null
      • copyOf

        @Beta
        public static <K,​V> ImmutableMap<K,​V> copyOf​(Iterable<? extends Map.Entry<? extends K,​? extends V>> entries)
        Returns an immutable map containing the specified entries. The returned map iterates over entries in the same order as the original iterable.
        Throws:
        NullPointerException - if any key, value, or entry is null
        IllegalArgumentException - if two entries have the same key
        Since:
        19.0
      • put

        @CanIgnoreReturnValue
        @Deprecated
        public final V put​(K k,
                           V v)
        Deprecated.
        Unsupported operation.
        Guaranteed to throw an exception and leave the map unmodified.
        Specified by:
        put in interface Map<K,​V>
        Parameters:
        k - key with which the specified value is to be associated
        v - value to be associated with the specified key
        Returns:
        the previous value associated with key, or null if there was no mapping for key. (A null return can also indicate that the map previously associated null with key, if the implementation supports null values.)
        Throws:
        UnsupportedOperationException - always
      • putIfAbsent

        @CanIgnoreReturnValue
        @Deprecated
        public final V putIfAbsent​(K key,
                                   V value)
        Deprecated.
        Unsupported operation.
        Guaranteed to throw an exception and leave the map unmodified.
        Specified by:
        putIfAbsent in interface Map<K,​V>
        Parameters:
        key - key with which the specified value is to be associated
        value - value to be associated with the specified key
        Returns:
        the previous value associated with the specified key, or null if there was no mapping for the key. (A null return can also indicate that the map previously associated null with the key, if the implementation supports null values.)
        Throws:
        UnsupportedOperationException - always
      • replace

        @Deprecated
        public final boolean replace​(K key,
                                     V oldValue,
                                     V newValue)
        Deprecated.
        Unsupported operation.
        Guaranteed to throw an exception and leave the map unmodified.
        Specified by:
        replace in interface Map<K,​V>
        Parameters:
        key - key with which the specified value is associated
        oldValue - value expected to be associated with the specified key
        newValue - value to be associated with the specified key
        Returns:
        true if the value was replaced
        Throws:
        UnsupportedOperationException - always
      • replace

        @Deprecated
        public final V replace​(K key,
                               V value)
        Deprecated.
        Unsupported operation.
        Guaranteed to throw an exception and leave the map unmodified.
        Specified by:
        replace in interface Map<K,​V>
        Parameters:
        key - key with which the specified value is associated
        value - value to be associated with the specified key
        Returns:
        the previous value associated with the specified key, or null if there was no mapping for the key. (A null return can also indicate that the map previously associated null with the key, if the implementation supports null values.)
        Throws:
        UnsupportedOperationException - always
      • computeIfAbsent

        @Deprecated
        public final V computeIfAbsent​(K key,
                                       Function<? super K,​? extends V> mappingFunction)
        Deprecated.
        Unsupported operation.
        Guaranteed to throw an exception and leave the map unmodified.
        Specified by:
        computeIfAbsent in interface Map<K,​V>
        Parameters:
        key - key with which the specified value is to be associated
        mappingFunction - the mapping function to compute a value
        Returns:
        the current (existing or computed) value associated with the specified key, or null if the computed value is null
        Throws:
        UnsupportedOperationException - always
      • computeIfPresent

        @Deprecated
        public final V computeIfPresent​(K key,
                                        BiFunction<? super K,​? super V,​? extends V> remappingFunction)
        Deprecated.
        Unsupported operation.
        Guaranteed to throw an exception and leave the map unmodified.
        Specified by:
        computeIfPresent in interface Map<K,​V>
        Parameters:
        key - key with which the specified value is to be associated
        remappingFunction - the remapping function to compute a value
        Returns:
        the new value associated with the specified key, or null if none
        Throws:
        UnsupportedOperationException - always
      • compute

        @Deprecated
        public final V compute​(K key,
                               BiFunction<? super K,​? super V,​? extends V> remappingFunction)
        Deprecated.
        Unsupported operation.
        Guaranteed to throw an exception and leave the map unmodified.
        Specified by:
        compute in interface Map<K,​V>
        Parameters:
        key - key with which the specified value is to be associated
        remappingFunction - the remapping function to compute a value
        Returns:
        the new value associated with the specified key, or null if none
        Throws:
        UnsupportedOperationException - always
      • merge

        @Deprecated
        public final V merge​(K key,
                             V value,
                             BiFunction<? super V,​? super V,​? extends V> remappingFunction)
        Deprecated.
        Unsupported operation.
        Guaranteed to throw an exception and leave the map unmodified.
        Specified by:
        merge in interface Map<K,​V>
        Parameters:
        key - key with which the resulting value is to be associated
        value - the non-null value to be merged with the existing value associated with the key or, if no existing value or a null value is associated with the key, to be associated with the key
        remappingFunction - the remapping function to recompute a value if present
        Returns:
        the new value associated with the specified key, or null if no value is associated with the key
        Throws:
        UnsupportedOperationException - always
      • putAll

        @Deprecated
        public final void putAll​(Map<? extends K,​? extends V> map)
        Deprecated.
        Unsupported operation.
        Guaranteed to throw an exception and leave the map unmodified.
        Specified by:
        putAll in interface Map<K,​V>
        Parameters:
        map - mappings to be stored in this map
        Throws:
        UnsupportedOperationException - always
      • remove

        @Deprecated
        public final V remove​(Object o)
        Deprecated.
        Unsupported operation.
        Guaranteed to throw an exception and leave the map unmodified.
        Specified by:
        remove in interface Map<K,​V>
        Parameters:
        o - key whose mapping is to be removed from the map
        Returns:
        the previous value associated with key, or null if there was no mapping for key.
        Throws:
        UnsupportedOperationException - always
      • remove

        @Deprecated
        public final boolean remove​(Object key,
                                    Object value)
        Deprecated.
        Unsupported operation.
        Guaranteed to throw an exception and leave the map unmodified.
        Specified by:
        remove in interface Map<K,​V>
        Parameters:
        key - key with which the specified value is associated
        value - value expected to be associated with the specified key
        Returns:
        true if the value was removed
        Throws:
        UnsupportedOperationException - always
      • isEmpty

        public boolean isEmpty()
        Description copied from interface: java.util.Map
        Returns true if this map contains no key-value mappings.
        Specified by:
        isEmpty in interface Map<K,​V>
        Returns:
        true if this map contains no key-value mappings
      • containsKey

        public boolean containsKey​(@Nullable Object key)
        Description copied from interface: java.util.Map
        Returns true if this map contains a mapping for the specified key. More formally, returns true if and only if this map contains a mapping for a key k such that Objects.equals(key, k). (There can be at most one such mapping.)
        Specified by:
        containsKey in interface Map<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
      • containsValue

        public boolean containsValue​(@Nullable Object value)
        Description copied from interface: java.util.Map
        Returns true if this map maps one or more keys to the specified value. More formally, returns true if and only if this map contains at least one mapping to a value v such that Objects.equals(value, v). This operation will probably require time linear in the map size for most implementations of the Map interface.
        Specified by:
        containsValue in interface Map<K,​V>
        Parameters:
        value - value whose presence in this map is to be tested
        Returns:
        true if this map maps one or more keys to the specified value
      • get

        @CheckForNull
        public abstract V get​(@Nullable Object key)
        Description copied from interface: java.util.Map
        Returns the value to which the specified key is mapped, or null if this map contains no mapping for the key.

        More formally, if this map contains a mapping from a key k to a value v such that Objects.equals(key, k), then this method returns v; otherwise it returns null. (There can be at most one such mapping.)

        If this map permits null values, then a return value of null does not necessarily indicate that the map contains no mapping for the key; it's also possible that the map explicitly maps the key to null. The containsKey operation may be used to distinguish these two cases.

        Specified by:
        get in interface Map<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
      • getOrDefault

        public final V getOrDefault​(@Nullable Object key,
                                    @Nullable V defaultValue)
        Description copied from interface: java.util.Map
        Returns the value to which the specified key is mapped, or defaultValue if this map contains no mapping for the key.
        Specified by:
        getOrDefault in interface Map<K,​V>
        Parameters:
        key - the key whose associated value is to be returned
        defaultValue - the default mapping of the key
        Returns:
        the value to which the specified key is mapped, or defaultValue if this map contains no mapping for the key
        Since:
        21.0 (but only since 23.5 in the Android flavor). Note, however, that Java 8 users can call this method with any version and flavor of Guava.
      • entrySet

        public ImmutableSet<Map.Entry<K,​V>> entrySet()
        Returns an immutable set of the mappings in this map. The iteration order is specified by the method used to create this map. Typically, this is insertion order.
        Specified by:
        entrySet in interface Map<K,​V>
        Returns:
        a set view of the mappings contained in this map
      • keySet

        public ImmutableSet<KkeySet()
        Returns an immutable set of the keys in this map, in the same order that they appear in entrySet.
        Specified by:
        keySet in interface Map<K,​V>
        Returns:
        a set view of the keys contained in this map
      • values

        public ImmutableCollection<Vvalues()
        Returns an immutable collection of the values in this map, in the same order that they appear in entrySet.
        Specified by:
        values in interface Map<K,​V>
        Returns:
        a collection view of the values contained in this map
      • equals

        public boolean equals​(@Nullable Object object)
        Description copied from class: java.lang.Object
        Indicates whether some other object is "equal to" this one.

        The equals method implements an equivalence relation on non-null object references:

        • It is reflexive: for any non-null reference value x, x.equals(x) should return true.
        • It is symmetric: for any non-null reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true.
        • It is transitive: for any non-null reference values x, y, and z, if x.equals(y) returns true and y.equals(z) returns true, then x.equals(z) should return true.
        • It is consistent: for any non-null reference values x and y, multiple invocations of x.equals(y) consistently return true or consistently return false, provided no information used in equals comparisons on the objects is modified.
        • For any non-null reference value x, x.equals(null) should return false.

        The equals method for class Object implements the most discriminating possible equivalence relation on objects; that is, for any non-null reference values x and y, this method returns true if and only if x and y refer to the same object (x == y has the value true).

        Note that it is generally necessary to override the hashCode method whenever this method is overridden, so as to maintain the general contract for the hashCode method, which states that equal objects must have equal hash codes.

        Specified by:
        equals in interface Map<K,​V>
        Overrides:
        equals in class Object
        Parameters:
        object - the reference object with which to compare.
        Returns:
        true if this object is the same as the obj argument; false otherwise.
        See Also:
        Object.hashCode(), HashMap
      • hashCode

        public int hashCode()
        Description copied from class: java.lang.Object
        Returns a hash code value for the object. This method is supported for the benefit of hash tables such as those provided by HashMap.

        The general contract of hashCode is:

        • Whenever it is invoked on the same object more than once during an execution of a Java application, the hashCode method must consistently return the same integer, provided no information used in equals comparisons on the object is modified. This integer need not remain consistent from one execution of an application to another execution of the same application.
        • If two objects are equal according to the equals(Object) method, then calling the hashCode method on each of the two objects must produce the same integer result.
        • It is not required that if two objects are unequal according to the Object.equals(java.lang.Object) method, then calling the hashCode method on each of the two objects must produce distinct integer results. However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of hash tables.

        As much as is reasonably practical, the hashCode method defined by class Object does return distinct integers for distinct objects. (The hashCode may or may not be implemented as some function of an object's memory address at some point in time.)

        Specified by:
        hashCode in interface Map<K,​V>
        Overrides:
        hashCode in class Object
        Returns:
        a hash code value for this object.
        See Also:
        Object.equals(java.lang.Object), System.identityHashCode(java.lang.Object)
      • toString

        public String toString()
        Description copied from class: java.lang.Object
        Returns a string representation of the object. In general, the toString method returns a string that "textually represents" this object. The result should be a concise but informative representation that is easy for a person to read. It is recommended that all subclasses override this method.

        The toString method for class Object returns a string consisting of the name of the class of which the object is an instance, the at-sign character `@', and the unsigned hexadecimal representation of the hash code of the object. In other words, this method returns a string equal to the value of:

         getClass().getName() + '@' + Integer.toHexString(hashCode())
         
        Overrides:
        toString in class Object
        Returns:
        a string representation of the object.