# RandomGenerator.SplittableGenerator

Added in[API level 35](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)

# SplittableGenerator

```
interface SplittableGenerator : RandomGenerator.StreamableGenerator
```

|--------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [java.util.random.RandomGenerator.SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#) |

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Known Direct Subclasses [SplittableRandom](https://developer.android.com/reference/kotlin/java/util/SplittableRandom.html#) |-----------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------| | [SplittableRandom](https://developer.android.com/reference/kotlin/java/util/SplittableRandom.html#) | A generator of uniform pseudorandom values (with period 264) applicable for use in (among other contexts) isolated parallel computations that may generate subtasks. | |

This interface is designed to provide a common protocol for objects that generate sequences of pseudorandom values and can be*split*into two objects (the original one and a new one) each of which obey that same protocol (and therefore can be recursively split indefinitely).

Ideally, all[SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)objects produced by recursive splitting from a single original[SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)object are statistically independent of one another and individually uniform. Therefore we would expect the set of values collectively generated by a set of such objects to have the same statistical properties as if the same quantity of values were generated by a single thread using a single[SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)object. In practice, one must settle for some approximation to independence and uniformity.

Methods are provided to perform a single splitting operation and also to produce a stream of generators split off from the original (by either iterative or recursive splitting, or a combination).

Objects that implement[SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)are typically not cryptographically secure. Consider instead using[SecureRandom](https://developer.android.com/reference/kotlin/java/security/SecureRandom.html#)to get a cryptographically secure pseudo-random number generator for use by security-sensitive applications.

## Summary

|                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Public methods                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ||
|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| openstatic[RandomGenerator.SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)!                                                                                          | [of](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#of(kotlin.String))`(`name:` `[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)!`)` Returns an instance of[SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)that utilizes the`name`[algorithm](https://developer.android.com/reference/kotlin/java/util/random/package-summary#algorithms).                                                                                                                                                                                                         |
| open[Stream](https://developer.android.com/reference/kotlin/java/util/stream/Stream.html#)\<[RandomGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator)!\>!                                              | [rngs](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#rngs())`()` Returns an effectively unlimited stream of new pseudorandom number generators, each of which implements the[RandomGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator)interface.                                                                                                                                                                                                                                                                                                                                                                      |
| open[Stream](https://developer.android.com/reference/kotlin/java/util/stream/Stream.html#)\<[RandomGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator)!\>!                                              | [rngs](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#rngs(kotlin.Long))`(`streamSize:` `[Long](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)`)` Returns a stream producing the given`streamSize`number of new pseudorandom number generators, each of which implements the[RandomGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator)interface.                                                                                                                                                                                                                                                |
| abstract[RandomGenerator.SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)!                                                                                            | [split](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#split())`()` Returns a new pseudorandom number generator, split off from this one, that implements the[RandomGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator)and[SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)interfaces.                                                                                                                                                                                                                                                       |
| abstract[RandomGenerator.SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)!                                                                                            | [split](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#split(java.util.random.RandomGenerator.SplittableGenerator))`(`source:` `[RandomGenerator.SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)!`)` Returns a new pseudorandom number generator, split off from this one, that implements the[RandomGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator)and[SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)interfaces.                                           |
| open[Stream](https://developer.android.com/reference/kotlin/java/util/stream/Stream.html#)\<[RandomGenerator.SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)!\>!     | [splits](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#splits())`()` Returns an effectively unlimited stream of new pseudorandom number generators, each of which implements the[SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)interface.                                                                                                                                                                                                                                                                                                                                         |
| abstract[Stream](https://developer.android.com/reference/kotlin/java/util/stream/Stream.html#)\<[RandomGenerator.SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)!\>! | [splits](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#splits(java.util.random.RandomGenerator.SplittableGenerator))`(`source:` `[RandomGenerator.SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)!`)` Returns an effectively unlimited stream of new pseudorandom number generators, each of which implements the[SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)interface.                                                                                                                             |
| abstract[Stream](https://developer.android.com/reference/kotlin/java/util/stream/Stream.html#)\<[RandomGenerator.SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)!\>! | [splits](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#splits(kotlin.Long))`(`streamSize:` `[Long](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)`)` Returns a stream producing the given`streamSize`number of new pseudorandom number generators, each of which implements the[SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)interface.                                                                                                                                                                                                                   |
| abstract[Stream](https://developer.android.com/reference/kotlin/java/util/stream/Stream.html#)\<[RandomGenerator.SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)!\>! | [splits](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#splits(kotlin.Long,%20java.util.random.RandomGenerator.SplittableGenerator))`(`streamSize:` `[Long](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)`, `source:` `[RandomGenerator.SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)!`)` Returns a stream producing the given`streamSize`number of new pseudorandom number generators, each of which implements the[SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)interface. |

## Public methods

### of

Added in[API level 35](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)  

```
open static fun of(name: String!): RandomGenerator.SplittableGenerator!
```

Returns an instance of[SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)that utilizes the`name`[algorithm](https://developer.android.com/reference/kotlin/java/util/random/package-summary#algorithms).

|                                                                                                            Parameters                                                                                                            ||
|--------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `name` | [String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)!:Name of random number generator[algorithm](https://developer.android.com/reference/kotlin/java/util/random/package-summary#algorithms) |

|                                                                                                                                         Return                                                                                                                                          ||
|----------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------|
| [RandomGenerator.SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)! | An instance of[SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#) |

|                                Exceptions                                 ||
|--------------------------------------|-------------------------------------|
| `java.lang.NullPointerException`     | if name is null                     |
| `java.lang.IllegalArgumentException` | if the named algorithm is not found |

### rngs

Added in[API level 35](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)  

```
open fun rngs(): Stream<RandomGenerator!>!
```

Returns an effectively unlimited stream of new pseudorandom number generators, each of which implements the[RandomGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator)interface. Ideally the generators in the stream will appear to be statistically independent.

|                                                                                                                                                                     Return                                                                                                                                                                      ||
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------|
| [Stream](https://developer.android.com/reference/kotlin/java/util/stream/Stream.html#)<[RandomGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator)!>! | a stream of objects that implement the[RandomGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator)interface |

### rngs

Added in[API level 35](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)  

```
open fun rngs(streamSize: Long): Stream<RandomGenerator!>!
```

Returns a stream producing the given`streamSize`number of new pseudorandom number generators, each of which implements the[RandomGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator)interface. Ideally the generators in the stream will appear to be statistically independent.

|                                                           Parameters                                                            ||
|--------------|-------------------------------------------------------------------------------------------------------------------|
| `streamSize` | [Long](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html):the number of generators to generate |

|                                                                                                                                                                     Return                                                                                                                                                                      ||
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------|
| [Stream](https://developer.android.com/reference/kotlin/java/util/stream/Stream.html#)<[RandomGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator)!>! | a stream of objects that implement the[RandomGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator)interface |

|                              Exceptions                               ||
|--------------------------------------|---------------------------------|
| `java.lang.IllegalArgumentException` | if`streamSize`is less than zero |

### split

Added in[API level 35](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)  

```
abstract fun split(): RandomGenerator.SplittableGenerator!
```

Returns a new pseudorandom number generator, split off from this one, that implements the[RandomGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator)and[SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)interfaces.

This pseudorandom number generator may be used as a source of pseudorandom bits used to initialize the state of the new one.

|                                                                                                                                                                                                          Return                                                                                                                                                                                                          ||
|----------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [RandomGenerator.SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)! | a new object that implements the[RandomGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator)and[SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)interfaces |

### split

Added in[API level 35](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)  

```
abstract fun split(source: RandomGenerator.SplittableGenerator!): RandomGenerator.SplittableGenerator!
```

Returns a new pseudorandom number generator, split off from this one, that implements the[RandomGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator)and[SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)interfaces.

|                                                                                                                                                                                                Parameters                                                                                                                                                                                                 ||
|----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `source` | [RandomGenerator.SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)!:a[SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)instance to be used instead of this one as a source of pseudorandom bits used to initialize the state of the new ones. |

|                                                                                                                                                                                                        Return                                                                                                                                                                                                         ||
|----------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [RandomGenerator.SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)! | an object that implements the[RandomGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator)and[SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)interfaces |

|                     Exceptions                      ||
|----------------------------------|-------------------|
| `java.lang.NullPointerException` | if source is null |

### splits

Added in[API level 35](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)  

```
open fun splits(): Stream<RandomGenerator.SplittableGenerator!>!
```

Returns an effectively unlimited stream of new pseudorandom number generators, each of which implements the[SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)interface.

This pseudorandom number generator may be used as a source of pseudorandom bits used to initialize the state the new ones.

|                                                                                                                                                                                        Return                                                                                                                                                                                        ||
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------|
| [Stream](https://developer.android.com/reference/kotlin/java/util/stream/Stream.html#)<[RandomGenerator.SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)!>! | a stream of[SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)objects |

### splits

Added in[API level 35](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)  

```
abstract fun splits(source: RandomGenerator.SplittableGenerator!): Stream<RandomGenerator.SplittableGenerator!>!
```

Returns an effectively unlimited stream of new pseudorandom number generators, each of which implements the[SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)interface.

|                                                                                                                                                                                                Parameters                                                                                                                                                                                                 ||
|----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `source` | [RandomGenerator.SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)!:a[SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)instance to be used instead of this one as a source of pseudorandom bits used to initialize the state of the new ones. |

|                                                                                                                                                                                        Return                                                                                                                                                                                        ||
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------|
| [Stream](https://developer.android.com/reference/kotlin/java/util/stream/Stream.html#)<[RandomGenerator.SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)!>! | a stream of[SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)objects |

|                     Exceptions                      ||
|----------------------------------|-------------------|
| `java.lang.NullPointerException` | if source is null |

### splits

Added in[API level 35](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)  

```
abstract fun splits(streamSize: Long): Stream<RandomGenerator.SplittableGenerator!>!
```

Returns a stream producing the given`streamSize`number of new pseudorandom number generators, each of which implements the[SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)interface.

This pseudorandom number generator may be used as a source of pseudorandom bits used to initialize the state the new ones.

|                                                         Parameters                                                          ||
|--------------|---------------------------------------------------------------------------------------------------------------|
| `streamSize` | [Long](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html):the number of values to generate |

|                                                                                                                                                                                        Return                                                                                                                                                                                        ||
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------|
| [Stream](https://developer.android.com/reference/kotlin/java/util/stream/Stream.html#)<[RandomGenerator.SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)!>! | a stream of[SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)objects |

|                              Exceptions                               ||
|--------------------------------------|---------------------------------|
| `java.lang.IllegalArgumentException` | if`streamSize`is less than zero |

### splits

Added in[API level 35](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)  

```
abstract fun splits(
    streamSize: Long, 
    source: RandomGenerator.SplittableGenerator!
): Stream<RandomGenerator.SplittableGenerator!>!
```

Returns a stream producing the given`streamSize`number of new pseudorandom number generators, each of which implements the[SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)interface.

|                                                                                                                                                                                                  Parameters                                                                                                                                                                                                   ||
|--------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `streamSize` | [Long](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html):the number of values to generate                                                                                                                                                                                                                                                                                   |
| `source`     | [RandomGenerator.SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)!:a[SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)instance to be used instead of this one as a source of pseudorandom bits used to initialize the state of the new ones. |

|                                                                                                                                                                                        Return                                                                                                                                                                                        ||
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------|
| [Stream](https://developer.android.com/reference/kotlin/java/util/stream/Stream.html#)<[RandomGenerator.SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)!>! | a stream of[SplittableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.SplittableGenerator#)objects |

|                              Exceptions                               ||
|--------------------------------------|---------------------------------|
| `java.lang.IllegalArgumentException` | if`streamSize`is less than zero |
| `java.lang.NullPointerException`     | if source is null               |