org.jjoost.collections.bimaps
Class BiMapOneToOne<K,V>

java.lang.Object
  extended by org.jjoost.collections.bimaps.AbstractBiMap<K,V,Map<K,V>,Map<V,K>>
      extended by org.jjoost.collections.bimaps.BiMapOneToOne<K,V>
All Implemented Interfaces:
java.io.Serializable, AnyMap<K,V>, AnyReadMap<K,V>, Map<K,V>, Function<K,V>

public class BiMapOneToOne<K,V>
extends AbstractBiMap<K,V,Map<K,V>,Map<V,K>>
implements Map<K,V>

See Also:
Serialized Form

Constructor Summary
BiMapOneToOne(Map<K,V> forwards, Map<V,K> back)
           
 
Method Summary
 V apply(K v)
          Returns the result of applying the function to the parameter
 Map<K,V> copy()
          Returns a copy of the map.
 V ensureAndGet(K key, Factory<? extends V> putIfNotPresent)
          Equivalent to putIfAbsent(key, putIfNotPresent), except that instead of returning the value previously associated with the key, returns the value associated with the key as the method is exiting; i.e.
 V ensureAndGet(K key, Function<? super K,? extends V> putIfNotPresent)
          Equivalent to putIfAbsent(key, putIfNotPresent.create(key)), except that
putIfNotPresent.create() is only executed if there is no key associated with the value.
 Set<java.util.Map.Entry<K,V>> entries()
          Returns a set representing all the key->value pairs in this map.
 V get(K key)
          A convenience method, equivalent to first(key)
 Map<V,K> inverse()
          Returns a map representing the inverse function of this map.
 Set<K> keys()
          Returns a set representing all the keys in the domain of this map.
 V putIfAbsent(K key, Function<? super K,? extends V> putIfNotPresent)
          Equivalent to putIfAbsent(key, putIfNotPresent.create()), except that putIfNotPresent.create() is only executed if there is no key associated with the value.
 int size()
          A convenience method, equivalent to both totalCount() and uniqueKeyCount()
 UnitarySet<V> values(K key)
          Returns a set representing the values associated with the provided key in this map.
 
Methods inherited from class org.jjoost.collections.bimaps.AbstractBiMap
add, clear, clearAndReturn, contains, contains, count, count, entries, first, isEmpty, list, permitsDuplicateKeys, put, putIfAbsent, remove, remove, removeAndReturn, removeAndReturn, removeAndReturnFirst, shrink, totalCount, uniqueKeyCount, values
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.jjoost.collections.Map
put, putIfAbsent
 
Methods inherited from interface org.jjoost.collections.AnyMap
add, clear, clearAndReturn, remove, remove, removeAndReturn, removeAndReturn, removeAndReturnFirst, shrink, values
 
Methods inherited from interface org.jjoost.collections.AnyReadMap
contains, contains, count, count, entries, first, isEmpty, list, permitsDuplicateKeys, totalCount, uniqueKeyCount
 

Constructor Detail

BiMapOneToOne

public BiMapOneToOne(Map<K,V> forwards,
                     Map<V,K> back)
Method Detail

copy

public Map<K,V> copy()
Description copied from interface: AnyMap
Returns a copy of the map. Note that this method may not necessarily return an object of the same class as the one it is called upon, but will return one indistinguishable from it with respect to all method calls.

Specified by:
copy in interface AnyMap<K,V>
Specified by:
copy in interface Map<K,V>
Returns:
the any map< k, v>

inverse

public Map<V,K> inverse()
Description copied from interface: AnyMap
Returns a map representing the inverse function of this map. This operation will typically be expensive unless the map is a BiMap in which case the action is trivial. The method may not return a map of the same type as the one it is called on (although typically this will be the case, and should happen wherever possible).

Specified by:
inverse in interface AnyMap<K,V>
Overrides:
inverse in class AbstractBiMap<K,V,Map<K,V>,Map<V,K>>
Returns:
the inverse map/function of the one called upon

entries

public Set<java.util.Map.Entry<K,V>> entries()
Description copied from interface: AnyReadMap
Returns a set representing all the key->value pairs in this map. In a ListMap this will be a MultiSet. This set should always reflect changes to the map, and changes to the set should be reflected in the map also. Otherwise, this set should behave exactly as a regular set does.

Specified by:
entries in interface AnyMap<K,V>
Specified by:
entries in interface AnyReadMap<K,V>
Specified by:
entries in interface Map<K,V>
Returns:
the entry set< k>

keys

public Set<K> keys()
Description copied from interface: AnyReadMap
Returns a set representing all the keys in the domain of this map. In a MultiMap or ListMap this will be a MultiSet. This set should always reflect changes to the map, and changes to the set should be reflected in the map also. Otherwise, this set should behave exactly as a regular set does. The key equality used by this map can be obtained from this set.

Depending on the implementation of map, this key set may contain every occurrence of equal keys provided to the map, or may contain a subset thereof with repetitions to bring the number of occurrences in line with the number provided.

Note that the put() methods on this set will always fail, because no value can be provided to update the map with.

Specified by:
keys in interface AnyMap<K,V>
Specified by:
keys in interface AnyReadMap<K,V>
Specified by:
keys in interface Map<K,V>
Returns:
the key set< k>

ensureAndGet

public V ensureAndGet(K key,
                      Factory<? extends V> putIfNotPresent)
Description copied from interface: Map
Equivalent to putIfAbsent(key, putIfNotPresent), except that instead of returning the value previously associated with the key, returns the value associated with the key as the method is exiting; i.e. if a new value is associated with the key as a result of this method, this new value will be returned, otherwise the existing value will be

Specified by:
ensureAndGet in interface Map<K,V>
Parameters:
key - the key
putIfNotPresent - the put if not present
Returns:
the value associated with the provided key post method

ensureAndGet

public V ensureAndGet(K key,
                      Function<? super K,? extends V> putIfNotPresent)
Description copied from interface: Map
Equivalent to putIfAbsent(key, putIfNotPresent.create(key)), except that
  1. putIfNotPresent.create() is only executed if there is no key associated with the value. In concurrent maps this is not a guarantee, but a best effort, as it is possible for another thread to set a value for the key after this has executed but before the record can be inserted
  2. instead of returning the value previously associated with the key, returns the value associated with the key as the method is exiting; i.e. if a new value is associated with the key as a result of this method, this new value will be returned, otherwise the existing value will be

Specified by:
ensureAndGet in interface Map<K,V>
Parameters:
key - the key
putIfNotPresent - put if not present
Returns:
the value associated with the key post method

get

public V get(K key)
Description copied from interface: Map
A convenience method, equivalent to first(key)

Specified by:
get in interface Map<K,V>
Parameters:
key - the key
Returns:
the value associated with the key, or null if none

putIfAbsent

public V putIfAbsent(K key,
                     Function<? super K,? extends V> putIfNotPresent)
Description copied from interface: Map
Equivalent to putIfAbsent(key, putIfNotPresent.create()), except that putIfNotPresent.create() is only executed if there is no key associated with the value. In concurrent maps this is not a guarantee, but a best effort, as it is possible for another thread to set a value for the key after this has executed but before the record can be inserted.

Specified by:
putIfAbsent in interface Map<K,V>
Parameters:
key - the key
putIfNotPresent - the put if not present
Returns:
the value associated with the provided key pre method

size

public int size()
Description copied from interface: Map
A convenience method, equivalent to both totalCount() and uniqueKeyCount()

Specified by:
size in interface Map<K,V>
Returns:
the int

apply

public V apply(K v)
Description copied from interface: Function
Returns the result of applying the function to the parameter

Specified by:
apply in interface Function<K,V>
Parameters:
v - something of type domain
Returns:
the result of the function (something of type range)

values

public UnitarySet<V> values(K key)
Description copied from interface: AnyReadMap
Returns a set representing the values associated with the provided key in this map. This set should always reflect changes to the map, and changes to the set should be reflected in the map also. Otherwise, this set should behave exactly as a regular set does.

Note that in a regular (scalar) map the set returned will be a UnitarySet, which contains at most one value. put() operations on such a set will override any existing value regardless of if it is equal to the one already present.

Specified by:
values in interface AnyMap<K,V>
Specified by:
values in interface AnyReadMap<K,V>
Specified by:
values in interface Map<K,V>
Returns:
the set of values mapped to by provided key