interface BiMap<K,V>
A type-invariant immutable bi-directional Map where keys and values have a one-to-one mapping. See the BiMap documentation and the BiMap API documentation
Companion namespace: BiMap
Extends: FastIterable<T>
Implemented by: BiMap.NonEmpty<K,V>
Type parameters
| Name | Description |
|---|---|
| K | the key type |
| V | the value type |
const b1 = BiMap.empty<number, string>()
const b2 = BiMap.of([1, 'a'], [2, 'b'])
Properties
context
Returns the context associated to this collection instance.
contextcontext associated to this collection instance.Definition
readonly context: BiMap.Context<K, V>;
isEmpty
Returns true if the collection is empty.
isEmptyDefinition
readonly isEmpty: boolean;
BiMap.empty<number, number>().isEmpty // => true
BiMap.of([1, 1], [2, 2]).isEmpty // => false
keyValueMap
Returns the Map representation of the key to value mapping.
keyValueMapsize
Returns the number of entries
sizevalueKeyMap
Returns the Map representation of the key to value mapping.
valueKeyMapMethods
[Symbol.iterator]
Returns a FastIterator instance used to iterate over the values of this Iterable.
[Symbol.iterator]FastIterator instance used to iterate over the values of this Iterable.addEntries
Returns the collection with the entries from the given StreamSource entries added.
addEntriesStreamSource entries added.Definitions
addEntries(entries: StreamSource.NonEmpty<readonly [K, V]>): BiMap.NonEmpty<K, V>;
addEntries(entries: StreamSource<readonly [K, V]>): BiMap<K, V>;
Parameters
| Name | Type | Description |
|---|---|---|
entries | StreamSource.NonEmpty<readonly [K, V]> | a StreamSource containing tuples with a key and value |
BiMap.of([1, 1]).addEntries([[2, 2], [1, 3]]).toArray()
// => [[1, 3], [2, 2]]
addEntry
Returns the collection with given entry added.
addEntryentry added.Definition
addEntry(entry: readonly [K, V]): BiMap.NonEmpty<K, V>;
Parameters
| Name | Type | Description |
|---|---|---|
entry | readonly [K, V] | a tuple containing a key and value |
BiMap.of([1, 1], [2, 2]).addEntry([1, 2]).toArray()
// => [[1, 2]]
assumeNonEmpty
Returns the collection as a .NonEmpty type
assumeNonEmptyDefinition
assumeNonEmpty(): BiMap.NonEmpty<K, V>;
RimbuError.EmptyCollectionAssumedNonEmptyError if the collection is empty
BiMap.empty<number, number>().assumeNonEmpty() // => throws
const m: BiMap<number, number> = BiMap.of([1, 1], [2, 2])
const m2: BiMap.NonEmpty<number, number> = m // => compiler error
const m3: BiMap.NonEmpty<number, number> = m.assumeNonEmpty()
returns reference to this collection
filter
Returns a collection containing only those entries that satisfy given pred predicate.
filterpred predicate.Definition
filter(pred: (entry: readonly [K, V], index: number, halt: () => void) => boolean, options?: {
negate?: boolean;
}): BiMap<K, V>;
Parameters
| Name | Type | Description |
|---|---|---|
pred | (entry: readonly [K, V], index: number, halt: () => void) => boolean | a predicate function receiving: - entry: the next entry- index: the entry index- halt: a function that, when called, ensures no next elements are passed |
options | {negate?: boolean;} | (optional) an object containing the following properties: - negate: (default: false) when true will negate the given predicate |
BiMap.of([1, 'a'], [2, 'b'], [3, 'c']).filter(entry => entry[0] === 2 || entry[1] === 'c').toArray()
// => [[2, 'b'], [3, 'c']]
forEach
Performs given function f for each entry of the collection, using given state as initial traversal state.
forEachf for each entry of the collection, using given state as initial traversal state.Definition
forEach(f: (entry: readonly [K, V], index: number, halt: () => void) => void, options?: {
state?: TraverseState;
}): void;
Parameters
| Name | Type | Description |
|---|---|---|
f | (entry: readonly [K, V], index: number, halt: () => void) => void | the function to perform for each entry, receiving: - entry: the next tuple of a key and value- index: the index of the element- halt: a function that, if called, ensures that no new elements are passed |
options | {state?: TraverseState;} | (optional) an object containing the following properties: - state: (optional) the traverse state |
BiMap.of([1, 'a'], [2, 'b'], [3, 'c']).forEach((entry, i, halt) => {
console.log([entry[1], entry[0]]);
if (i >= 1) halt();
})
// => logs ['a', 1] ['b', 2]
O(N)
getKey
Returns the key associated with the given value, or given otherwise value if the key is not in the collection.
getKeyvalue, or given otherwise value if the key is not in the collection.Definitions
getKey<UV = V>(value: RelatedTo<V, UV>): K | undefined;
getKey<UV, O>(value: RelatedTo<V, UV>, otherwise: OptLazy<O>): K | O;
Type parameters
| Name | Default | Description |
|---|---|---|
| UV | V |
Parameters
| Name | Type | Description |
|---|---|---|
value | RelatedTo<V, UV> | thevalue to look for |
const m = BiMap.of([1, 'a'], [2, 'b'])
m.getKey('b') // => 2
m.getKey('z') // => undefined
m.getKey('b', 'none') // => 2
m.getKey('z', 'none') // => 'none'
getValue
Returns the value associated with the given key, or given otherwise value if the key is not in the collection.
getValuekey, or given otherwise value if the key is not in the collection.Definitions
getValue<UK = K>(key: RelatedTo<K, UK>): V | undefined;
getValue<UK, O>(key: RelatedTo<K, UK>, otherwise: OptLazy<O>): V | O;
Type parameters
| Name | Default | Description |
|---|---|---|
| UK | K |
Parameters
| Name | Type | Description |
|---|---|---|
key | RelatedTo<K, UK> | the key to look for |
const m = BiMap.of([1, 'a'], [2, 'b'])
m.getValue(2) // => 'b'
m.getValue(3) // => undefined
m.getValue(2, 'none') // => 'b'
m.getValue(3, 'none') // => 'none'
hasKey
Returns true if the given key is present in the collection.
hasKeykey is present in the collection.hasValue
Returns true if the given value is present in the collection.
hasValuevalue is present in the collection.nonEmpty
Returns true if there is at least one entry in the collection, and instructs the compiler to treat the collection as a .NonEmpty type.
nonEmptyDefinition
nonEmpty(): this is BiMap.NonEmpty<K, V>;
const m: BiMap<number, number> = BiMap.of([1, 1], [2, 2])
m.stream().first(0) // compiler allows fallback value since the Stream may be empty
if (m.nonEmpty()) {
m.stream().first(0) // compiler error: fallback value not allowed since Stream is not empty
}
removeKey
Returns the collection where the entry associated with given key is removed if it was part of the collection.
removeKeykey is removed if it was part of the collection.Definition
Type parameters
| Name | Default | Description |
|---|---|---|
| UK | K |
Parameters
| Name | Type | Description |
|---|---|---|
key | RelatedTo<K, UK> | the key of the entry to remove |
const m = BiMap.of([1, 1], [2, 2])
m.removeKey(2).toArray() // => [[1, 1]]
m.removeKey(3) === m // true
guarantees same object reference if the key is not present
removeKeyAndGet
Returns a tuple containing the collection of which the entry associated with given key is removed, and the value that is associated with that key. If the key is not present, it will return undefined instead.
removeKeyAndGetkey is removed, and the value that is associated with that key. If the key is not present, it will return undefined instead.Definition
removeKeyAndGet<UK = K>(key: RelatedTo<K, UK>): [BiMap<K, V>, V] | undefined;
Type parameters
| Name | Default | Description |
|---|---|---|
| UK | K |
Parameters
| Name | Type | Description |
|---|---|---|
key | RelatedTo<K, UK> | the key of the entry to remove |
const m = BiMap.of([1, 1], [2, 2])
const result = m.removeKeyAndGet(2)
if (result !== undefined) console.log([result[0].toString(), result[1]]) // => logs [BiMap(1 <=> 1), 2]
console.log(m.removeKeyAndGet(3)) // => logs undefined
removeKeys
Returns the collection where the entries associated with each key in given keys are removed if they were present.
removeKeyskeys are removed if they were present.Definition
removeKeys<UK = K>(keys: StreamSource<RelatedTo<K, UK>>): BiMap<K, V>;
Type parameters
| Name | Default | Description |
|---|---|---|
| UK | K |
Parameters
| Name | Type | Description |
|---|---|---|
keys | StreamSource<RelatedTo<K, UK>> | a StreamSource of keys to remove |
const m = BiMap.of([1, 1], [2, 2])
m.removeKeys([1, 3]).toArray() // => [[2, 2]]
m.removeKeys([1, 3, 2]).toArray() // => []
m.removeKeys([3, 4, 5]) === m // => true
guarantees same object reference if none of the keys are present
removeValue
Returns the collection where the entry associated with given value is removed if it was part of the collection.
removeValuevalue is removed if it was part of the collection.Definition
Type parameters
| Name | Default | Description |
|---|---|---|
| UV | V |
Parameters
| Name | Type | Description |
|---|---|---|
value | RelatedTo<V, UV> | the value of the entry to remove |
const m = BiMap.of([1, 1], [2, 2])
m.removeValue(2).toArray() // => [[1, 1]]
m.removeValue(3) === m // true
guarantees same object reference if the key is not present
removeValueAndGet
Returns a tuple containing the collection of which the entry associated with given value is removed, and the key that is associated with that value. If the value is not present, it will return undefined instead.
removeValueAndGetvalue is removed, and the key that is associated with that value. If the value is not present, it will return undefined instead.Definition
removeValueAndGet<UV = V>(value: RelatedTo<V, UV>): [BiMap<K, V>, K] | undefined;
Type parameters
| Name | Default | Description |
|---|---|---|
| UV | V |
Parameters
| Name | Type | Description |
|---|---|---|
value | RelatedTo<V, UV> | the value of the entry to remove |
const m = BiMap.of([1, 1], [2, 2])
const result = m.removeValueAndGet(2)
if (result !== undefined) console.log([result[0].toString(), result[1]]) // => logs [BiMap(1 <=> 1), 2]
console.log(m.removeValueAndGet(3)) // => logs undefined
removeValues
Returns the collection where the entries associated with each value in given values are removed if they were present.
removeValuesvalues are removed if they were present.Definition
removeValues<UV = V>(value: StreamSource<RelatedTo<V, UV>>): BiMap<K, V>;
Type parameters
| Name | Default | Description |
|---|---|---|
| UV | V |
Parameters
| Name | Type | Description |
|---|---|---|
value | StreamSource<RelatedTo<V, UV>> |
const m = BiMap.of([1, 1], [2, 2])
m.removeValues([1, 3]).toArray() // => [[2, 2]]
m.removeValues([1, 3, 2]).toArray() // => []
m.removeValues([3, 4, 5]) === m // => true
guarantees same object reference if none of the keys are present
set
Returns the collection with the given key associated to the given value.
setkey associated to the given value.Definition
set(key: K, value: V): BiMap.NonEmpty<K, V>;
Parameters
| Name | Type | Description |
|---|---|---|
key | K | the entry key to add |
value | V | the entry value to add |
BiMap.of([1, 1], [2, 2]).set(1, 2).toArray()
// => [[1, 2]]
if the key and/or value are already associated, the previous value will be 'replaced'
stream
Returns a Stream containing all entries of this collection as tuples of key and value.
streamStream containing all entries of this collection as tuples of key and value.streamKeys
Returns a Stream containing all keys of this collection.
streamKeysStream containing all keys of this collection.streamValues
Returns a Stream containing all values of this collection.
streamValuesStream containing all values of this collection.toArray
Returns an array containing all entries in this collection.
toArrayDefinition
toArray(): (readonly [K, V])[];
BiMap.of([1, 'a'], [2, 'b']).toArray() // => [[1, 'a'], [2, 'b']]
O(log(N)) @note it is safe to mutate the returned array, however, the array elements are not copied, thus should be treated as read-only
toBuilder
Returns a builder object containing the entries of this collection.
toBuilderDefinition
toBuilder(): BiMap.Builder<K, V>;
const builder: BiMap.Builder<number, string> = BiMap.of([1, 'a'], [2, 'b']).toBuilder()
toJSON
Returns a JSON representation of this collection.
toJSONtoString
Returns a string representation of this collection.
toStringDefinition
toString(): string;
BiMap.of([1, 'a'], [2, 'b']).toString() // => BiMap(1 <=> 'a', 2 <=> 'b')
updateKeyAtValue
Returns the collection where the key associated with given value is updated with the given keyUpdate value or update function.
updateKeyAtValuevalue is updated with the given keyUpdate value or update function.Definition
updateKeyAtValue<UV = V>(keyUpdate: Update<K>, value: RelatedTo<V, UV>): BiMap<K, V>;
Type parameters
| Name | Default | Description |
|---|---|---|
| UV | V |
Parameters
| Name | Type | Description |
|---|---|---|
keyUpdate | Update<K> | a new value or function taking the current key and returning a new key |
value | RelatedTo<V, UV> | the value of the entry to update |
const m = BiMap.of([1, 1], [2, 2])
m.updateKeyAtValue(3, 3).toArray()
// => [[1, 1], [2, 2]]
m.updateKeyAtValue(10, 2).toArray()
// => [[1, 1], [10, 2]]
m.updateKeyAtValue((v) => v + 1, 1)
// => [[2, 1]]
updateValueAtKey
Returns the collection where the value associated with given key is updated with the given valueUpdate value or update function.
updateValueAtKeykey is updated with the given valueUpdate value or update function.Definition
updateValueAtKey<UK = K>(key: RelatedTo<K, UK>, valueUpdate: Update<V>): BiMap<K, V>;
Type parameters
| Name | Default | Description |
|---|---|---|
| UK | K |
Parameters
| Name | Type | Description |
|---|---|---|
key | RelatedTo<K, UK> | the key of the entry to update |
valueUpdate | Update<V> | a new value or function taking the current value and returning a new value |
const m = BiMap.of([1, 1], [2, 2])
m.updateValueAtKey(3, 3).toArray()
// => [[1, 1], [2, 2]]
m.updateValueAtKey(2, 10).toArray()
// => [[1, 1], [2, 10]]
m.updateValueAtKey(1, v => v + 1)
// => [[1, 2]]