Package: groovy.lang

## [Java] Class MapWithDefault<K, V>

- groovy.lang.MapWithDefault

- All Implemented Interfaces and Traits:
    Map

      public final class MapWithDefault<K, V>
      extends Object
      implements Map

  A wrapper for Map which allows a default value to be specified using a closure. Normally not instantiated directly but used via the DGM `withDefault` method.

  Since:
    1.7.1

- - ### Methods Summary

    Methods
    Type Params | Return Type | Name and description
    --- | --- | ---
    `` | `public void` | `clear()`
    `` | `public boolean` | `containsKey(Object key)`
    `` | `public boolean` | `containsValue(Object value)`
    `` | `public Set<Map.Entry<K, V>>` | `entrySet()`
    `` | `public boolean` | `equals(Object obj)`
    `` | `public V` | `get(Object key)` Returns the value to which the specified key is mapped, or the default value as specified by the initializing closure if this map contains no mapping for the key.
    `` | `public int` | `hashCode()`
    `` | `public boolean` | `isEmpty()`
    `` | `public Set<K>` | `keySet()`
    `<K, V>` | `public static Map<K, V>` | `newInstance(Map<K, V> m, Closure<V> initClosure)` Decorates the given Map allowing a default value to be specified.
    `<K, V>` | `public static Map<K, V>` | `newInstance(Map<K, V> m, boolean autoGrow, boolean autoShrink, Closure<V> initClosure)` Decorates the given Map allowing a default value to be specified.
    `` | `public V` | `put(K key, V value)` Associates the specified value with the specified key in this map.
    `` | `public void` | `putAll(Map<? extends K, ? extends V> m)`
    `` | `public V` | `remove(Object key)`
    `` | `public int` | `size()`
    `` | `public Collection<V>` | `values()`

  - ### Inherited Methods Summary

    Inherited Methods
    Methods inherited from class | Name
    --- | ---
    `class Object` | `wait, wait, wait, equals, toString, hashCode, getClass, notify, notifyAll`

- - ### Method Detail

    - #### @Override public void clear()

    - #### @Override public boolean containsKey(Object key)

    - #### @Override public boolean containsValue(Object value)

    - #### @Override public Set<Map.Entry<K, V>> entrySet()

    - #### @Override public boolean equals(Object obj)

    - #### @Override public V get(Object key)

      Returns the value to which the specified key is mapped, or the default value as specified by the initializing closure if this map contains no mapping for the key. If `autoGrow` is true and the initializing closure is called, the map is modified to contain the new key and value so that the calculated value is effectively cached if needed again. Otherwise, the map will be unchanged.

    - #### @Override public int hashCode()

    - #### @Override public boolean isEmpty()

    - #### @Override public Set<K> keySet()

    - #### <K, V> public static Map<K, V> newInstance(Map<K, V> m, Closure<V> initClosure)

      Decorates the given Map allowing a default value to be specified.

      Parameters:
        `m` - a Map to wrap
        `initClosure` - the closure which when passed the `key` returns the default value
      Returns:
        the wrapped Map

    - #### <K, V> public static Map<K, V> newInstance(Map<K, V> m, boolean autoGrow, boolean autoShrink, Closure<V> initClosure)

      Decorates the given Map allowing a default value to be specified. Allows the behavior to be configured using `autoGrow` and `autoShrink` parameters. The value of `autoShrink` doesn't alter any values in the initial wrapped map, but you can start with an empty map and use `putAll` if you really need the minimal backing map value.

      Parameters:
        `m` - a Map to wrap
        `autoGrow` - when true, also mutate the map adding in this value; otherwise, don't mutate the map, just return to calculated value
        `autoShrink` - when true, ensure the key will be removed if attempting to store the default value using put or putAll
        `initClosure` - the closure which when passed the `key` returns the default value
      Returns:
        the wrapped Map
      Since:
        4.0.1

    - #### @Override public V put(K key, V value)

      Associates the specified value with the specified key in this map. If `autoShrink` is true, the initializing closure is called and if it evaluates to the value being stored, the value will not be stored and indeed any existing value will be removed. This can be useful when trying to keep the memory requirements small for large key sets where only a spare number of entries differ from the default.

      Returns:
        the previous value associated with `key` if any, otherwise `null`.

    - #### @Override public void putAll(Map<? extends K, ? extends V> m)

    - #### @Override public V remove(Object key)

    - #### @Override public int size()

    - #### @Override public Collection<V> values()