# IntObjectMap

Artifact: [androidx.collection:collection](https://developer.android.com/jetpack/androidx/releases/collection) [View Source](https://cs.android.com/search?q=file:androidx/collection/IntObjectMap.kt+class:androidx.collection.IntObjectMap) Added in [1.4.0](https://developer.android.com/jetpack/androidx/releases/collection#1.4.0)

*** ** * ** ***


```
public sealed class IntObjectMap<V extends Object>
```

<br />

Known direct subclasses [MutableIntObjectMap](https://developer.android.com/reference/androidx/collection/MutableIntObjectMap)

|---|---|
| `https://developer.android.com/reference/androidx/collection/MutableIntObjectMap` | `https://developer.android.com/reference/androidx/collection/MutableIntObjectMap` is a container with a `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-mutable-map/index.html`-like interface for keys with `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` primitives and reference type values. |

*** ** * ** ***

`https://developer.android.com/reference/androidx/collection/IntObjectMap` is a container with a `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-map/index.html`-like interface for keys with `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` primitives and reference type values.

The underlying implementation is designed to avoid allocations from boxing, and insertion, removal, retrieval, and iteration operations. Allocations may still happen on insertion when the underlying storage needs to grow to accommodate newly added entries to the table. In addition, this implementation minimizes memory usage by avoiding the use of separate objects to hold key/value pairs.

This implementation makes no guarantee as to the order of the keys and values stored, nor does it make guarantees that the order remains constant over time.

This implementation is not thread-safe: if multiple threads access this container concurrently, and one or more threads modify the structure of the map (insertion or removal for instance), the calling code must provide the appropriate synchronization. Multiple threads are safe to read from this map concurrently if no write is happening.

This implementation is read-only and only allows data to be queried. A mutable implementation is provided by `https://developer.android.com/reference/androidx/collection/MutableIntObjectMap`.

| See also |
|---|---|
| `https://developer.android.com/reference/androidx/collection/MutableIntObjectMap` |   |

## Summary

| ### Protected constructors |
|---|
| `<V extends https://developer.android.com/reference/java/lang/Object.html> https://developer.android.com/reference/androidx/collection/IntObjectMap#IntObjectMap()()` |

| ### Public methods |
|---|---|
| `final boolean` | `https://developer.android.com/reference/androidx/collection/IntObjectMap#all(kotlin.Function2)( @https://developer.android.com/reference/androidx/annotation/NonNull Function2<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Integer.html, @https://developer.android.com/reference/androidx/annotation/NonNull V, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Boolean.html> predicate )` Returns true if all entries match the given `https://developer.android.com/reference/androidx/collection/IntObjectMap#all(kotlin.Function2)`. |
| `final boolean` | `https://developer.android.com/reference/androidx/collection/IntObjectMap#any()()` Returns `true` if this map has at least one entry. |
| `final boolean` | `https://developer.android.com/reference/androidx/collection/IntObjectMap#any(kotlin.Function2)( @https://developer.android.com/reference/androidx/annotation/NonNull Function2<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Integer.html, @https://developer.android.com/reference/androidx/annotation/NonNull V, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Boolean.html> predicate )` Returns true if at least one entry matches the given `https://developer.android.com/reference/androidx/collection/IntObjectMap#any(kotlin.Function2)`. |
| `final boolean` | `https://developer.android.com/reference/androidx/collection/IntObjectMap#contains(kotlin.Int)(int key)` Returns true if the specified `https://developer.android.com/reference/androidx/collection/IntObjectMap#contains(kotlin.Int)` is present in this map, false otherwise. |
| `final boolean` | `https://developer.android.com/reference/androidx/collection/IntObjectMap#containsKey(kotlin.Int)(int key)` Returns true if the specified `https://developer.android.com/reference/androidx/collection/IntObjectMap#containsKey(kotlin.Int)` is present in this map, false otherwise. |
| `final boolean` | `https://developer.android.com/reference/androidx/collection/IntObjectMap#containsValue(kotlin.Any)(@https://developer.android.com/reference/androidx/annotation/NonNull V value)` Returns true if the specified `https://developer.android.com/reference/androidx/collection/IntObjectMap#containsValue(kotlin.Any)` is present in this map, false otherwise. |
| `final int` | `https://developer.android.com/reference/androidx/collection/IntObjectMap#count()()` Returns the number of entries in this map. |
| `final int` | `https://developer.android.com/reference/androidx/collection/IntObjectMap#count(kotlin.Function2)( @https://developer.android.com/reference/androidx/annotation/NonNull Function2<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Integer.html, @https://developer.android.com/reference/androidx/annotation/NonNull V, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Boolean.html> predicate )` Returns the number of entries matching the given `https://developer.android.com/reference/androidx/collection/IntObjectMap#count(kotlin.Function2)`. |
| `boolean` | `https://developer.android.com/reference/androidx/collection/IntObjectMap#equals(kotlin.Any)(https://developer.android.com/reference/java/lang/Object.html other)` Compares the specified object `https://developer.android.com/reference/androidx/collection/IntObjectMap#equals(kotlin.Any)` with this hash map for equality. |
| `final void` | `https://developer.android.com/reference/androidx/collection/IntObjectMap#forEach(kotlin.Function2)(@https://developer.android.com/reference/androidx/annotation/NonNull Function2<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Integer.html, @https://developer.android.com/reference/androidx/annotation/NonNull value, https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html> block)` Iterates over every key/value pair stored in this map by invoking the specified `https://developer.android.com/reference/androidx/collection/IntObjectMap#forEach(kotlin.Function2)` lambda. |
| `final void` | `https://developer.android.com/reference/androidx/collection/IntObjectMap#forEachKey(kotlin.Function1)(@https://developer.android.com/reference/androidx/annotation/NonNull Function1<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Integer.html, https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html> block)` Iterates over every key stored in this map by invoking the specified `https://developer.android.com/reference/androidx/collection/IntObjectMap#forEachKey(kotlin.Function1)` lambda. |
| `final void` | `https://developer.android.com/reference/androidx/collection/IntObjectMap#forEachValue(kotlin.Function1)(@https://developer.android.com/reference/androidx/annotation/NonNull Function1<@https://developer.android.com/reference/androidx/annotation/NonNull value, https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html> block)` Iterates over every value stored in this map by invoking the specified `https://developer.android.com/reference/androidx/collection/IntObjectMap#forEachValue(kotlin.Function1)` lambda. |
| `final V` | `https://developer.android.com/reference/androidx/collection/IntObjectMap#get(kotlin.Int)(int key)` Returns the value corresponding to the given `https://developer.android.com/reference/androidx/collection/IntObjectMap#get(kotlin.Int)`, or `null` if such a key is not present in the map. |
| `final int` | `https://developer.android.com/reference/androidx/collection/IntObjectMap#getCapacity()()` Returns the number of key-value pairs that can be stored in this map without requiring internal storage reallocation. |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull V` | `https://developer.android.com/reference/androidx/collection/IntObjectMap#getOrDefault(kotlin.Int,kotlin.Any)(int key, @https://developer.android.com/reference/androidx/annotation/NonNull V defaultValue)` Returns the value to which the specified `https://developer.android.com/reference/androidx/collection/IntObjectMap#getOrDefault(kotlin.Int,kotlin.Any)` is mapped, or `https://developer.android.com/reference/androidx/collection/IntObjectMap#getOrDefault(kotlin.Int,kotlin.Any)` if this map contains no mapping for the key. |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull V` | `https://developer.android.com/reference/androidx/collection/IntObjectMap#getOrElse(kotlin.Int,kotlin.Function0)(int key, @https://developer.android.com/reference/androidx/annotation/NonNull Function0<@https://developer.android.com/reference/androidx/annotation/NonNull V> defaultValue)` Returns the value for the given `https://developer.android.com/reference/androidx/collection/IntObjectMap#getOrElse(kotlin.Int,kotlin.Function0)` if the value is present and not null. |
| `final int` | `https://developer.android.com/reference/androidx/collection/IntObjectMap#getSize()()` Returns the number of key-value pairs in this map. |
| `int` | `https://developer.android.com/reference/androidx/collection/IntObjectMap#hashCode()()` Returns the hash code value for this map. |
| `final boolean` | `https://developer.android.com/reference/androidx/collection/IntObjectMap#isEmpty()()` Indicates whether this map is empty. |
| `final boolean` | `https://developer.android.com/reference/androidx/collection/IntObjectMap#isNotEmpty()()` Returns `true` if this map is not empty. |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html` | `https://developer.android.com/reference/androidx/collection/IntObjectMap#joinToString(kotlin.CharSequence,kotlin.CharSequence,kotlin.CharSequence,kotlin.Int,kotlin.CharSequence)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/CharSequence.html separator, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/CharSequence.html prefix, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/CharSequence.html postfix, int limit, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/CharSequence.html truncated )` Creates a String from the entries, separated by `https://developer.android.com/reference/androidx/collection/IntObjectMap#joinToString(kotlin.CharSequence,kotlin.CharSequence,kotlin.CharSequence,kotlin.Int,kotlin.CharSequence)` and using `https://developer.android.com/reference/androidx/collection/IntObjectMap#joinToString(kotlin.CharSequence,kotlin.CharSequence,kotlin.CharSequence,kotlin.Int,kotlin.CharSequence)` before and `https://developer.android.com/reference/androidx/collection/IntObjectMap#joinToString(kotlin.CharSequence,kotlin.CharSequence,kotlin.CharSequence,kotlin.Int,kotlin.CharSequence)` after, if supplied. |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html` | `https://developer.android.com/reference/androidx/collection/IntObjectMap#joinToString(kotlin.CharSequence,kotlin.CharSequence,kotlin.CharSequence,kotlin.Int,kotlin.CharSequence,kotlin.Function2)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/CharSequence.html separator, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/CharSequence.html prefix, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/CharSequence.html postfix, int limit, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/CharSequence.html truncated, @https://developer.android.com/reference/androidx/annotation/NonNull Function2<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Integer.html, @https://developer.android.com/reference/androidx/annotation/NonNull value, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/CharSequence.html> transform )` Creates a String from the entries, separated by `https://developer.android.com/reference/androidx/collection/IntObjectMap#joinToString(kotlin.CharSequence,kotlin.CharSequence,kotlin.CharSequence,kotlin.Int,kotlin.CharSequence,kotlin.Function2)` and using `https://developer.android.com/reference/androidx/collection/IntObjectMap#joinToString(kotlin.CharSequence,kotlin.CharSequence,kotlin.CharSequence,kotlin.Int,kotlin.CharSequence,kotlin.Function2)` before and `https://developer.android.com/reference/androidx/collection/IntObjectMap#joinToString(kotlin.CharSequence,kotlin.CharSequence,kotlin.CharSequence,kotlin.Int,kotlin.CharSequence,kotlin.Function2)` after, if supplied. |
| `final boolean` | `https://developer.android.com/reference/androidx/collection/IntObjectMap#none()()` Returns `true` if this map has no entries. |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html` | `https://developer.android.com/reference/androidx/collection/IntObjectMap#toString()()` Returns a string representation of this map. |

## Protected constructors

### IntObjectMap

```
protected <V extends Object> IntObjectMap()
```

## Public methods

### all

Added in [1.4.0](https://developer.android.com/jetpack/androidx/releases/collection#1.4.0)

```
public final boolean all(
    @NonNull Function2<@NonNull Integer, @NonNull V, @NonNull Boolean> predicate
)
```

Returns true if all entries match the given `https://developer.android.com/reference/androidx/collection/IntObjectMap#all(kotlin.Function2)`.

### any

Added in [1.4.0](https://developer.android.com/jetpack/androidx/releases/collection#1.4.0)

```
public final boolean any()
```

Returns `true` if this map has at least one entry.

### any

Added in [1.4.0](https://developer.android.com/jetpack/androidx/releases/collection#1.4.0)

```
public final boolean any(
    @NonNull Function2<@NonNull Integer, @NonNull V, @NonNull Boolean> predicate
)
```

Returns true if at least one entry matches the given `https://developer.android.com/reference/androidx/collection/IntObjectMap#any(kotlin.Function2)`.

### contains

Added in [1.4.0](https://developer.android.com/jetpack/androidx/releases/collection#1.4.0)

```
public final boolean contains(int key)
```

Returns true if the specified `https://developer.android.com/reference/androidx/collection/IntObjectMap#contains(kotlin.Int)` is present in this map, false otherwise.

### containsKey

Added in [1.4.0](https://developer.android.com/jetpack/androidx/releases/collection#1.4.0)

```
public final boolean containsKey(int key)
```

Returns true if the specified `https://developer.android.com/reference/androidx/collection/IntObjectMap#containsKey(kotlin.Int)` is present in this map, false otherwise.

### containsValue

Added in [1.4.0](https://developer.android.com/jetpack/androidx/releases/collection#1.4.0)

```
public final boolean containsValue(@NonNull V value)
```

Returns true if the specified `https://developer.android.com/reference/androidx/collection/IntObjectMap#containsValue(kotlin.Any)` is present in this map, false otherwise.

### count

Added in [1.4.0](https://developer.android.com/jetpack/androidx/releases/collection#1.4.0)

```
public final int count()
```

Returns the number of entries in this map.

### count

Added in [1.4.0](https://developer.android.com/jetpack/androidx/releases/collection#1.4.0)

```
public final int count(
    @NonNull Function2<@NonNull Integer, @NonNull V, @NonNull Boolean> predicate
)
```

Returns the number of entries matching the given `https://developer.android.com/reference/androidx/collection/IntObjectMap#count(kotlin.Function2)`.

### equals

```
public boolean equals(Object other)
```

Compares the specified object `https://developer.android.com/reference/androidx/collection/IntObjectMap#equals(kotlin.Any)` with this hash map for equality. The two objects are considered equal if `https://developer.android.com/reference/androidx/collection/IntObjectMap#equals(kotlin.Any)`:

- Is a `https://developer.android.com/reference/androidx/collection/IntObjectMap`

- Has the same `https://developer.android.com/reference/androidx/collection/IntObjectMap#size()` as this map

- Contains key/value pairs equal to this map's pair

### forEach

Added in [1.4.0](https://developer.android.com/jetpack/androidx/releases/collection#1.4.0)

```
public final void forEach(@NonNull Function2<@NonNull Integer, @NonNull value, Unit> block)
```

Iterates over every key/value pair stored in this map by invoking the specified `https://developer.android.com/reference/androidx/collection/IntObjectMap#forEach(kotlin.Function2)` lambda.

### forEachKey

Added in [1.4.0](https://developer.android.com/jetpack/androidx/releases/collection#1.4.0)

```
public final void forEachKey(@NonNull Function1<@NonNull Integer, Unit> block)
```

Iterates over every key stored in this map by invoking the specified `https://developer.android.com/reference/androidx/collection/IntObjectMap#forEachKey(kotlin.Function1)` lambda.

### forEachValue

Added in [1.4.0](https://developer.android.com/jetpack/androidx/releases/collection#1.4.0)

```
public final void forEachValue(@NonNull Function1<@NonNull value, Unit> block)
```

Iterates over every value stored in this map by invoking the specified `https://developer.android.com/reference/androidx/collection/IntObjectMap#forEachValue(kotlin.Function1)` lambda.

### get

Added in [1.4.0](https://developer.android.com/jetpack/androidx/releases/collection#1.4.0)

```
public final V get(int key)
```

Returns the value corresponding to the given `https://developer.android.com/reference/androidx/collection/IntObjectMap#get(kotlin.Int)`, or `null` if such a key is not present in the map.

### getCapacity

Added in [1.4.0](https://developer.android.com/jetpack/androidx/releases/collection#1.4.0)

```
public final int getCapacity()
```

Returns the number of key-value pairs that can be stored in this map without requiring internal storage reallocation.

### getOrDefault

Added in [1.4.0](https://developer.android.com/jetpack/androidx/releases/collection#1.4.0)

```
public final @NonNull V getOrDefault(int key, @NonNull V defaultValue)
```

Returns the value to which the specified `https://developer.android.com/reference/androidx/collection/IntObjectMap#getOrDefault(kotlin.Int,kotlin.Any)` is mapped, or `https://developer.android.com/reference/androidx/collection/IntObjectMap#getOrDefault(kotlin.Int,kotlin.Any)` if this map contains no mapping for the key.

### getOrElse

Added in [1.4.0](https://developer.android.com/jetpack/androidx/releases/collection#1.4.0)

```
public final @NonNull V getOrElse(int key, @NonNull Function0<@NonNull V> defaultValue)
```

Returns the value for the given `https://developer.android.com/reference/androidx/collection/IntObjectMap#getOrElse(kotlin.Int,kotlin.Function0)` if the value is present and not null. Otherwise, returns the result of the `https://developer.android.com/reference/androidx/collection/IntObjectMap#getOrElse(kotlin.Int,kotlin.Function0)` function.

### getSize

Added in [1.4.0](https://developer.android.com/jetpack/androidx/releases/collection#1.4.0)

```
public final int getSize()
```

Returns the number of key-value pairs in this map.

### hashCode

```
public int hashCode()
```

Returns the hash code value for this map. The hash code the sum of the hash codes of each key/value pair.

### isEmpty

Added in [1.4.0](https://developer.android.com/jetpack/androidx/releases/collection#1.4.0)

```
public final boolean isEmpty()
```

Indicates whether this map is empty.

### isNotEmpty

Added in [1.4.0](https://developer.android.com/jetpack/androidx/releases/collection#1.4.0)

```
public final boolean isNotEmpty()
```

Returns `true` if this map is not empty.

### joinToString

Added in [1.4.0](https://developer.android.com/jetpack/androidx/releases/collection#1.4.0)

```
public final @NonNull String joinToString(
    @NonNull CharSequence separator,
    @NonNull CharSequence prefix,
    @NonNull CharSequence postfix,
    int limit,
    @NonNull CharSequence truncated
)
```

Creates a String from the entries, separated by `https://developer.android.com/reference/androidx/collection/IntObjectMap#joinToString(kotlin.CharSequence,kotlin.CharSequence,kotlin.CharSequence,kotlin.Int,kotlin.CharSequence)` and using `https://developer.android.com/reference/androidx/collection/IntObjectMap#joinToString(kotlin.CharSequence,kotlin.CharSequence,kotlin.CharSequence,kotlin.Int,kotlin.CharSequence)` before and `https://developer.android.com/reference/androidx/collection/IntObjectMap#joinToString(kotlin.CharSequence,kotlin.CharSequence,kotlin.CharSequence,kotlin.Int,kotlin.CharSequence)` after, if supplied.

When a non-negative value of `https://developer.android.com/reference/androidx/collection/IntObjectMap#joinToString(kotlin.CharSequence,kotlin.CharSequence,kotlin.CharSequence,kotlin.Int,kotlin.CharSequence)` is provided, a maximum of `https://developer.android.com/reference/androidx/collection/IntObjectMap#joinToString(kotlin.CharSequence,kotlin.CharSequence,kotlin.CharSequence,kotlin.Int,kotlin.CharSequence)` items are used to generate the string. If the collection holds more than `https://developer.android.com/reference/androidx/collection/IntObjectMap#joinToString(kotlin.CharSequence,kotlin.CharSequence,kotlin.CharSequence,kotlin.Int,kotlin.CharSequence)` items, the string is terminated with `https://developer.android.com/reference/androidx/collection/IntObjectMap#joinToString(kotlin.CharSequence,kotlin.CharSequence,kotlin.CharSequence,kotlin.Int,kotlin.CharSequence)`.

### joinToString

```
public final @NonNull String joinToString(
    @NonNull CharSequence separator,
    @NonNull CharSequence prefix,
    @NonNull CharSequence postfix,
    int limit,
    @NonNull CharSequence truncated,
    @NonNull Function2<@NonNull Integer, @NonNull value, @NonNull CharSequence> transform
)
```

Creates a String from the entries, separated by `https://developer.android.com/reference/androidx/collection/IntObjectMap#joinToString(kotlin.CharSequence,kotlin.CharSequence,kotlin.CharSequence,kotlin.Int,kotlin.CharSequence,kotlin.Function2)` and using `https://developer.android.com/reference/androidx/collection/IntObjectMap#joinToString(kotlin.CharSequence,kotlin.CharSequence,kotlin.CharSequence,kotlin.Int,kotlin.CharSequence,kotlin.Function2)` before and `https://developer.android.com/reference/androidx/collection/IntObjectMap#joinToString(kotlin.CharSequence,kotlin.CharSequence,kotlin.CharSequence,kotlin.Int,kotlin.CharSequence,kotlin.Function2)` after, if supplied. Each entry is created with `https://developer.android.com/reference/androidx/collection/IntObjectMap#joinToString(kotlin.CharSequence,kotlin.CharSequence,kotlin.CharSequence,kotlin.Int,kotlin.CharSequence,kotlin.Function2)`.

When a non-negative value of `https://developer.android.com/reference/androidx/collection/IntObjectMap#joinToString(kotlin.CharSequence,kotlin.CharSequence,kotlin.CharSequence,kotlin.Int,kotlin.CharSequence,kotlin.Function2)` is provided, a maximum of `https://developer.android.com/reference/androidx/collection/IntObjectMap#joinToString(kotlin.CharSequence,kotlin.CharSequence,kotlin.CharSequence,kotlin.Int,kotlin.CharSequence,kotlin.Function2)` items are used to generate the string. If the collection holds more than `https://developer.android.com/reference/androidx/collection/IntObjectMap#joinToString(kotlin.CharSequence,kotlin.CharSequence,kotlin.CharSequence,kotlin.Int,kotlin.CharSequence,kotlin.Function2)` items, the string is terminated with `https://developer.android.com/reference/androidx/collection/IntObjectMap#joinToString(kotlin.CharSequence,kotlin.CharSequence,kotlin.CharSequence,kotlin.Int,kotlin.CharSequence,kotlin.Function2)`.

### none

Added in [1.4.0](https://developer.android.com/jetpack/androidx/releases/collection#1.4.0)

```
public final boolean none()
```

Returns `true` if this map has no entries.

### toString

```
public @NonNull String toString()
```

Returns a string representation of this map. The map is denoted in the string by the `{}`. Each key/value pair present in the map is represented inside '{}`by a substring of the form `key=value`, and pairs are separated by `, \`.