# Class PredicatedSortedMap<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.PredicatedMap<K,V>
org.apache.commons.collections4.map.PredicatedSortedMap<K,V>

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

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

public class PredicatedSortedMap<K,V> extends PredicatedMap<K,V> implements SortedMap<K,V>
Decorates another `SortedMap` to validate that additions match a specified predicate.

This map exists to provide validation for the decorated map. It is normally created to decorate an empty map. If an object cannot be added to the map, an IllegalArgumentException is thrown.

One usage would be to ensure that no null keys are added to the map.

       SortedMap map =
         PredicatedSortedMap.predicatedSortedMap(new TreeMap(),
                                                 NotNullPredicate.notNullPredicate(),
                                                 null);

Note that PredicatedSortedMap is not synchronized and is not thread-safe. If you wish to use this map from multiple threads concurrently, you must use appropriate synchronization. The simplest approach is to wrap this map using `Collections.synchronizedSortedMap(java.util.SortedMap<K, V>)`. This class may throw exceptions when accessed by concurrent threads without synchronization.

This class is Serializable from Commons Collections 3.1.

Since:
  3.0
See Also:
  - Serialized Form

- ## Nested Class Summary

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

  `Map.Entry<K,V>`

- ## Field Summary

  ### Fields inherited from class org.apache.commons.collections4.map.PredicatedMap

  `keyPredicate, valuePredicate`

- ## Constructor Summary

  Constructors
  Modifier
  Constructor
  Description
  `protected`
  `PredicatedSortedMap(SortedMap<K,V> map, Predicate<? super K> keyPredicate, Predicate<? super V> valuePredicate)`
  Constructor that wraps (not copies).

- ## Method Summary

  Modifier and Type
  Method
  Description
  `Comparator<? super K>`
  `comparator()`
  `Set<Map.Entry<K,V>>`
  `entrySet()`
  Gets a set view of the mappings contained in this map.
  `K`
  `firstKey()`
  `protected SortedMap<K,V>`
  `getSortedMap()`
  Gets the map being decorated.
  `SortedMap<K,V>`
  `headMap(K toKey)`
  `K`
  `lastKey()`
  `static <K, V> PredicatedSortedMap<K,V>`
  `predicatedSortedMap(SortedMap<K,V> map, Predicate<? super K> keyPredicate, Predicate<? super V> valuePredicate)`
  Factory method to create a predicated (validating) sorted map.
  `SortedMap<K,V>`
  `subMap(K fromKey, K toKey)`
  `SortedMap<K,V>`
  `tailMap(K fromKey)`

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

  `checkSetValue, isSetValueChecking, predicatedMap, put, putAll, validate`

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

  `clear, containsKey, containsValue, decorated, equals, get, hashCode, isEmpty, keySet, remove, size, toString, values`

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

  `mapIterator`

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

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

  ### 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 java.util.SortedMap

  `entrySet, keySet, values`

- ## Constructor Details

  - ### PredicatedSortedMap

    protected PredicatedSortedMap(SortedMap<K,V> map, Predicate<? super K> keyPredicate, Predicate<? super V> valuePredicate)
    Constructor that wraps (not copies).
    Parameters:
      `map` - the map to decorate, must not be null
      `keyPredicate` - the predicate to validate the keys, null means no check
      `valuePredicate` - the predicate to validate to values, null means no check
    Throws:
      `NullPointerException` - if the map is null

- ## Method Details

  - ### predicatedSortedMap

    public static <K, V> PredicatedSortedMap<K,V> predicatedSortedMap(SortedMap<K,V> map, Predicate<? super K> keyPredicate, Predicate<? super V> valuePredicate)
    Factory method to create a predicated (validating) sorted map.

    If there are any elements already in the list being decorated, they are validated.

    Type Parameters:
      `K` - the key type
      `V` - the value type
    Parameters:
      `map` - the map to decorate, must not be null
      `keyPredicate` - the predicate to validate the keys, null means no check
      `valuePredicate` - the predicate to validate to values, null means no check
    Returns:
      a new predicated sorted map
    Throws:
      `NullPointerException` - if the map is null
    Since:
      4.0

  - ### comparator

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

  - ### firstKey

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

  - ### getSortedMap

    protected SortedMap<K,V> getSortedMap()
    Gets the map being decorated.
    Returns:
      the decorated map

  - ### headMap

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

  - ### lastKey

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

  - ### 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>`

  - ### entrySet

    public Set<Map.Entry<K,V>> entrySet()
    Description copied from interface: `Get`
    Gets a set view of the mappings contained in this map.
    Specified by:
      `entrySet` in interface `Get<K,V>`
    Specified by:
      `entrySet` in interface `Map<K,V>`
    Overrides:
      `entrySet` in class `AbstractMapDecorator<K,V>`
    Returns:
      a set view of the mappings contained in this map.
    See Also:
      - `Map.entrySet()`