# Class AbstractSortedMapDecorator<K,V>

java.lang.Object
org.apache.commons.collections4.map.AbstractIterableMap<K,V>
org.apache.commons.collections4.map.AbstractMapDecorator<K,V>
org.apache.commons.collections4.map.AbstractSortedMapDecorator<K,V>

Type Parameters:
  `K` - the type of the keys in the map
  `V` - the type of the values in the map

All Implemented Interfaces:
  `Map<K,V>`, `SortedMap<K,V>`, `Get<K,V>`, `IterableGet<K,V>`, `IterableMap<K,V>`, `IterableSortedMap<K,V>`, `OrderedMap<K,V>`, `Put<K,V>`

Direct Known Subclasses:
  `DualTreeBidiMap.ViewMap`, `FixedSizeSortedMap`, `UnmodifiableSortedMap`

public abstract class AbstractSortedMapDecorator<K,V> extends AbstractMapDecorator<K,V> implements IterableSortedMap<K,V>
Provides a base decorator that enables additional functionality to be added to a Map via decoration.

Methods are forwarded directly to the decorated map.

This implementation does not perform any special processing with the map views. Instead it simply returns the set/collection from the wrapped map. This may be undesirable, for example if you are trying to write a validating implementation it would provide a loophole around the validation. But, you might want that loophole, so this class is kept simple.

Since:
  3.0

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Class
  Description
  `protected static class`
  `AbstractSortedMapDecorator.SortedMapIterator<K,V>`
  OrderedMapIterator implementation.

  ### Nested classes/interfaces inherited from interface java.util.Map

  `Map.Entry<K,V>`

- ## Constructor Summary

  Constructors
  Modifier
  Constructor
  Description
  `protected`
  `AbstractSortedMapDecorator()`
  Constructor only used in deserialization, do not use otherwise.
  ``
  `AbstractSortedMapDecorator(SortedMap<K,V> map)`
  Constructor that wraps (not copies).

- ## Method Summary

  Modifier and Type
  Method
  Description
  `Comparator<? super K>`
  `comparator()`
  `protected SortedMap<K,V>`
  `decorated()`
  Gets the map being decorated.
  `K`
  `firstKey()`
  Gets the first key currently in this map.
  `SortedMap<K,V>`
  `headMap(K toKey)`
  `K`
  `lastKey()`
  Gets the last key currently in this map.
  `OrderedMapIterator<K,V>`
  `mapIterator()`
  Obtains a `MapIterator` over the map.
  `K`
  `nextKey(K key)`
  Gets the next key after the one specified.
  `K`
  `previousKey(K key)`
  Gets the previous key before the one specified.
  `SortedMap<K,V>`
  `subMap(K fromKey, K toKey)`
  `SortedMap<K,V>`
  `tailMap(K fromKey)`

  ### Methods inherited from class org.apache.commons.collections4.map.AbstractMapDecorator

  `clear, containsKey, containsValue, entrySet, equals, get, hashCode, isEmpty, keySet, put, putAll, remove, size, toString, values`

  ### Methods inherited from class java.lang.Object

  `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

  ### Methods inherited from interface org.apache.commons.collections4.Get

  `containsKey, containsValue, entrySet, get, isEmpty, keySet, remove, size, values`

  ### Methods inherited from interface java.util.Map

  `clear, compute, computeIfAbsent, computeIfPresent, containsKey, containsValue, equals, forEach, get, getOrDefault, hashCode, isEmpty, merge, put, putAll, putIfAbsent, remove, remove, replace, replace, replaceAll, size`

  ### Methods inherited from interface org.apache.commons.collections4.Put

  `clear, put, putAll`

  ### Methods inherited from interface java.util.SortedMap

  `entrySet, keySet, values`

- ## Constructor Details

  - ### AbstractSortedMapDecorator

    protected AbstractSortedMapDecorator()
    Constructor only used in deserialization, do not use otherwise.
    Since:
      3.1

  - ### AbstractSortedMapDecorator

    public AbstractSortedMapDecorator(SortedMap<K,V> map)
    Constructor that wraps (not copies).
    Parameters:
      `map` - the map to decorate, must not be null
    Throws:
      `NullPointerException` - if the map is null

- ## Method Details

  - ### comparator

    public Comparator<? super K> comparator()
    Specified by:
      `comparator` in interface `SortedMap<K,V>`

  - ### decorated

    protected SortedMap<K,V> decorated()
    Gets the map being decorated.
    Overrides:
      `decorated` in class `AbstractMapDecorator<K,V>`
    Returns:
      the decorated map

  - ### firstKey

    public K firstKey()
    Description copied from interface: `OrderedMap`
    Gets the first key currently in this map.
    Specified by:
      `firstKey` in interface `OrderedMap<K,V>`
    Specified by:
      `firstKey` in interface `SortedMap<K,V>`
    Returns:
      the first key currently in this map

  - ### headMap

    public SortedMap<K,V> headMap(K toKey)
    Specified by:
      `headMap` in interface `SortedMap<K,V>`

  - ### lastKey

    public K lastKey()
    Description copied from interface: `OrderedMap`
    Gets the last key currently in this map.
    Specified by:
      `lastKey` in interface `OrderedMap<K,V>`
    Specified by:
      `lastKey` in interface `SortedMap<K,V>`
    Returns:
      the last key currently in this map

  - ### mapIterator

    public OrderedMapIterator<K,V> mapIterator()
    Obtains a `MapIterator` over the map.

    A map iterator is an efficient way of iterating over maps. There is no need to access the entry set or use Map Entry objects.

         IterableMap<String,Integer> map = new HashedMap<String,Integer>();
         MapIterator<String,Integer> it = map.mapIterator();
         while (it.hasNext()) {
           String key = it.next();
           Integer value = it.getValue();
           it.setValue(value + 1);
         }

    Specified by:
      `mapIterator` in interface `IterableGet<K,V>`
    Specified by:
      `mapIterator` in interface `OrderedMap<K,V>`
    Overrides:
      `mapIterator` in class `AbstractIterableMap<K,V>`
    Returns:
      a map iterator

  - ### nextKey

    public K nextKey(K key)
    Description copied from interface: `OrderedMap`
    Gets the next key after the one specified.
    Specified by:
      `nextKey` in interface `OrderedMap<K,V>`
    Parameters:
      `key` - the key to search for next from
    Returns:
      the next key, null if no match or at end

  - ### previousKey

    public K previousKey(K key)
    Description copied from interface: `OrderedMap`
    Gets the previous key before the one specified.
    Specified by:
      `previousKey` in interface `OrderedMap<K,V>`
    Parameters:
      `key` - the key to search for previous from
    Returns:
      the previous key, null if no match or at start

  - ### subMap

    public SortedMap<K,V> subMap(K fromKey, K toKey)
    Specified by:
      `subMap` in interface `SortedMap<K,V>`

  - ### tailMap

    public SortedMap<K,V> tailMap(K fromKey)
    Specified by:
      `tailMap` in interface `SortedMap<K,V>`