Added in [API level 35](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels) Summary: [Methods](https://developer.android.com/reference/java/util/random/RandomGeneratorFactory#pubmethods) \| [Inherited Methods](https://developer.android.com/reference/java/util/random/RandomGeneratorFactory#inhmethods)

# RandomGeneratorFactory


`
public

final

class
RandomGeneratorFactory
`


`

extends https://developer.android.com/reference/java/lang/Object


`

`


`

|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object) ||
| ↳ | java.util.random.RandomGeneratorFactory\<T extends [java.util.random.RandomGenerator](https://developer.android.com/reference/java/util/random/RandomGenerator)\> |

<br />

*** ** * ** ***

This is a factory class for generating multiple random number generators
of a specific [algorithm](https://developer.android.com/reference/java/util/random/package-summary#algorithms).
`https://developer.android.com/reference/java/util/random/RandomGeneratorFactory` also provides
methods for selecting random number generator algorithms.

A specific `https://developer.android.com/reference/java/util/random/RandomGeneratorFactory` can be located by using the
`https://developer.android.com/reference/java/util/random/RandomGeneratorFactory#of(java.lang.String)` method, where the argument string
is the name of the [algorithm](https://developer.android.com/reference/java/util/random/package-summary#algorithms)
required. The method
`https://developer.android.com/reference/java/util/random/RandomGeneratorFactory#all()` produces a non-empty `https://developer.android.com/reference/java/util/stream/Stream` of all available
`https://developer.android.com/reference/java/util/random/RandomGeneratorFactory` that can be searched
to locate a `https://developer.android.com/reference/java/util/random/RandomGeneratorFactory` suitable to the task.

There are three methods for constructing a RandomGenerator instance,
depending on the type of initial seed required.
`https://developer.android.com/reference/java/util/random/RandomGeneratorFactory#create(long)` is used for long
seed construction,
`https://developer.android.com/reference/java/util/random/RandomGeneratorFactory#create(byte[])` is used for byte\[\]
seed construction, and
`https://developer.android.com/reference/java/util/random/RandomGeneratorFactory#create()` is used for random seed
construction. Example;

    RandomGeneratorFactory<RandomGenerator> factory = RandomGeneratorFactory.of("Random");

         for (int i = 0; i < 10; i++) {
             new Thread(() -> {
                 RandomGenerator random = factory.create(100L);
                 System.out.println(random.nextDouble());
             }).start();
         }
     
RandomGeneratorFactory also provides methods describing the attributes (or properties) of a generator and can be used to select random number generator [algorithms](https://developer.android.com/reference/java/util/random/package-summary#algorithms). These methods are typically used in conjunction with `https://developer.android.com/reference/java/util/random/RandomGeneratorFactory#all()`. In this example, the code locates the `https://developer.android.com/reference/java/util/random/RandomGeneratorFactory` that produces `https://developer.android.com/reference/java/util/random/RandomGenerator` with the highest number of state bits.

    RandomGeneratorFactory<RandomGenerator> best = RandomGeneratorFactory.all()
             .sorted(Comparator.comparingInt(RandomGenerator::stateBits).reversed())
             .findFirst()
             .orElse(RandomGeneratorFactory.of("Random"));
         System.out.println(best.name() + " in " + best.group() + " was selected");

         RandomGenerator rng = best.create();
         System.out.println(rng.nextLong());
     
<br />

**See also:**

- `https://developer.android.com/reference/java/util/random/package-summary`

## Summary

| ### Public methods ||
|---|---|
| ` static https://developer.android.com/reference/java/util/stream/Stream<https://developer.android.com/reference/java/util/random/RandomGeneratorFactory<https://developer.android.com/reference/java/util/random/RandomGenerator>>` | ` https://developer.android.com/reference/java/util/random/RandomGeneratorFactory#all()() ` Returns a non-empty stream of available `https://developer.android.com/reference/java/util/random/RandomGeneratorFactory`. |
| ` T` | ` https://developer.android.com/reference/java/util/random/RandomGeneratorFactory#create(byte[])(byte[] seed) ` Create an instance of `https://developer.android.com/reference/java/util/random/RandomGenerator` based on [algorithm](https://developer.android.com/reference/java/util/random/package-summary#algorithms) chosen providing a starting byte\[\] seed. |
| ` T` | ` https://developer.android.com/reference/java/util/random/RandomGeneratorFactory#create(long)(long seed) ` Create an instance of `https://developer.android.com/reference/java/util/random/RandomGenerator` based on [algorithm](https://developer.android.com/reference/java/util/random/package-summary#algorithms) chosen providing a starting long seed. |
| ` T` | ` https://developer.android.com/reference/java/util/random/RandomGeneratorFactory#create()() ` Create an instance of `https://developer.android.com/reference/java/util/random/RandomGenerator` based on [algorithm](https://developer.android.com/reference/java/util/random/package-summary#algorithms) chosen. |
| ` int` | ` https://developer.android.com/reference/java/util/random/RandomGeneratorFactory#equidistribution()() ` Returns the equidistribution of the [algorithm](https://developer.android.com/reference/java/util/random/package-summary#algorithms). |
| ` static https://developer.android.com/reference/java/util/random/RandomGeneratorFactory<https://developer.android.com/reference/java/util/random/RandomGenerator>` | ` https://developer.android.com/reference/java/util/random/RandomGeneratorFactory#getDefault()() ` Returns a `https://developer.android.com/reference/java/util/random/RandomGeneratorFactory` meeting the minimal requirement of having an algorithm whose state bits are greater than or equal 64. |
| ` https://developer.android.com/reference/java/lang/String` | ` https://developer.android.com/reference/java/util/random/RandomGeneratorFactory#group()() ` Return the group name of the [algorithm](https://developer.android.com/reference/java/util/random/package-summary#algorithms) used by the random number generator. |
| ` boolean` | ` https://developer.android.com/reference/java/util/random/RandomGeneratorFactory#isArbitrarilyJumpable()() ` Return true if random generator can jump an arbitrarily specified distant point in the state cycle. |
| ` boolean` | ` https://developer.android.com/reference/java/util/random/RandomGeneratorFactory#isDeprecated()() ` Return true if the implementation of RandomGenerator (algorithm) has been marked for deprecation. |
| ` boolean` | ` https://developer.android.com/reference/java/util/random/RandomGeneratorFactory#isHardware()() ` Return true if random generator uses a hardware device (HRNG) to produce entropic input. |
| ` boolean` | ` https://developer.android.com/reference/java/util/random/RandomGeneratorFactory#isJumpable()() ` Return true if random generator can jump a specified distant point in the state cycle. |
| ` boolean` | ` https://developer.android.com/reference/java/util/random/RandomGeneratorFactory#isLeapable()() ` Return true if random generator is jumpable and can leap to a very distant point in the state cycle. |
| ` boolean` | ` https://developer.android.com/reference/java/util/random/RandomGeneratorFactory#isSplittable()() ` Return true if random generator can be cloned into a separate object with the same properties but positioned further in the state cycle. |
| ` boolean` | ` https://developer.android.com/reference/java/util/random/RandomGeneratorFactory#isStatistical()() ` Return true if random generator is computed using an arithmetic [algorithm](https://developer.android.com/reference/java/util/random/package-summary#algorithms) and is statistically deterministic. |
| ` boolean` | ` https://developer.android.com/reference/java/util/random/RandomGeneratorFactory#isStochastic()() ` Return true if random generator is computed using external or entropic sources as inputs. |
| ` boolean` | ` https://developer.android.com/reference/java/util/random/RandomGeneratorFactory#isStreamable()() ` Return true if random generator can be used to create `https://developer.android.com/reference/java/util/stream/Stream` of random numbers. |
| ` https://developer.android.com/reference/java/lang/String` | ` https://developer.android.com/reference/java/util/random/RandomGeneratorFactory#name()() ` Return the name of the [algorithm](https://developer.android.com/reference/java/util/random/package-summary#algorithms) used by the random number generator. |
| ` static <T extends https://developer.android.com/reference/java/util/random/RandomGenerator> https://developer.android.com/reference/java/util/random/RandomGeneratorFactory<T>` | ` https://developer.android.com/reference/java/util/random/RandomGeneratorFactory#of(java.lang.String)(https://developer.android.com/reference/java/lang/String name) ` Returns a `https://developer.android.com/reference/java/util/random/RandomGeneratorFactory` that can produce instances of `https://developer.android.com/reference/java/util/random/RandomGenerator` that utilize the `name` [algorithm](https://developer.android.com/reference/java/util/random/package-summary#algorithms). |
| ` https://developer.android.com/reference/java/math/BigInteger` | ` https://developer.android.com/reference/java/util/random/RandomGeneratorFactory#period()() ` Return the period of the [algorithm](https://developer.android.com/reference/java/util/random/package-summary#algorithms) used by the random number generator. |
| ` int` | ` https://developer.android.com/reference/java/util/random/RandomGeneratorFactory#stateBits()() ` Returns number of bits used by the [algorithm](https://developer.android.com/reference/java/util/random/package-summary#algorithms) to maintain state of seed. |

| ### Inherited methods |
|---|---|
| From class ` https://developer.android.com/reference/java/lang/Object ` |---|---| | ` https://developer.android.com/reference/java/lang/Object` | ` https://developer.android.com/reference/java/lang/Object#clone()() ` Creates and returns a copy of this object. | | ` boolean` | ` https://developer.android.com/reference/java/lang/Object#equals(java.lang.Object)(https://developer.android.com/reference/java/lang/Object obj) ` Indicates whether some other object is "equal to" this one. | | ` void` | ` https://developer.android.com/reference/java/lang/Object#finalize()() ` Called by the garbage collector on an object when garbage collection determines that there are no more references to the object. | | ` final https://developer.android.com/reference/java/lang/Class<?>` | ` https://developer.android.com/reference/java/lang/Object#getClass()() ` Returns the runtime class of this `Object`. | | ` int` | ` https://developer.android.com/reference/java/lang/Object#hashCode()() ` Returns a hash code value for the object. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#notify()() ` Wakes up a single thread that is waiting on this object's monitor. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#notifyAll()() ` Wakes up all threads that are waiting on this object's monitor. | | ` https://developer.android.com/reference/java/lang/String` | ` https://developer.android.com/reference/java/lang/Object#toString()() ` Returns a string representation of the object. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#wait(long,%20int)(long timeoutMillis, int nanos) ` Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*, or until a certain amount of real time has elapsed. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#wait(long)(long timeoutMillis) ` Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*, or until a certain amount of real time has elapsed. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#wait()() ` Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*. | ||

## Public methods

### all

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

```
public static Stream<RandomGeneratorFactory<RandomGenerator>> all ()
```

Returns a non-empty stream of available `https://developer.android.com/reference/java/util/random/RandomGeneratorFactory`.

RandomGenerators that are marked as deprecated are not included in the result.

<br />

##### Implementation Requirements:

- Availability is determined by RandomGeneratorFactory using the service provider API to locate implementations of the RandomGenerator interface.

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/util/stream/Stream<https://developer.android.com/reference/java/util/random/RandomGeneratorFactory<https://developer.android.com/reference/java/util/random/RandomGenerator>>` | a non-empty stream of all available `https://developer.android.com/reference/java/util/random/RandomGeneratorFactory`. <br /> |

### create

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

```
public T create (byte[] seed)
```

Create an instance of `https://developer.android.com/reference/java/util/random/RandomGenerator` based on
[algorithm](https://developer.android.com/reference/java/util/random/package-summary#algorithms) chosen
providing a starting byte\[\] seed. If byte\[\] seed is not supported by an
[algorithm](https://developer.android.com/reference/java/util/random/package-summary#algorithms) then the no
argument form of create is used.

<br />

| Parameters ||
|---|---|
| `seed` | `byte`: byte array random seed value. <br /> |

| Returns ||
|---|---|
| `T` | new in instance of `https://developer.android.com/reference/java/util/random/RandomGenerator`. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/NullPointerException` | if seed is null. |

### create

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

```
public T create (long seed)
```

Create an instance of `https://developer.android.com/reference/java/util/random/RandomGenerator` based on
[algorithm](https://developer.android.com/reference/java/util/random/package-summary#algorithms) chosen
providing a starting long seed. If long seed is not supported by an
algorithm then the no argument form of create is used.

<br />

| Parameters ||
|---|---|
| `seed` | `long`: long random seed value. <br /> |

| Returns ||
|---|---|
| `T` | new in instance of `https://developer.android.com/reference/java/util/random/RandomGenerator`. <br /> |

### create

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

```
public T create ()
```

Create an instance of `https://developer.android.com/reference/java/util/random/RandomGenerator` based on
[algorithm](https://developer.android.com/reference/java/util/random/package-summary#algorithms) chosen.

<br />

| Returns ||
|---|---|
| `T` | new in instance of `https://developer.android.com/reference/java/util/random/RandomGenerator`. <br /> |

### equidistribution

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

```
public int equidistribution ()
```

Returns the equidistribution of the [algorithm](https://developer.android.com/reference/java/util/random/package-summary#algorithms).

<br />

| Returns ||
|---|---|
| `int` | the equidistribution of the [algorithm](https://developer.android.com/reference/java/util/random/package-summary#algorithms). <br /> |

### getDefault

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

```
public static RandomGeneratorFactory<RandomGenerator> getDefault ()
```

Returns a `https://developer.android.com/reference/java/util/random/RandomGeneratorFactory` meeting the minimal requirement
of having an algorithm whose state bits are greater than or equal 64.

<br />

##### Implementation Requirements:

- Since algorithms will improve over time, there is no guarantee that this method will return the same algorithm over time.

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/util/random/RandomGeneratorFactory<https://developer.android.com/reference/java/util/random/RandomGenerator>` | a `https://developer.android.com/reference/java/util/random/RandomGeneratorFactory` <br /> |

### group

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

```
public String group ()
```

Return the group name of the [algorithm](https://developer.android.com/reference/java/util/random/package-summary#algorithms)
used by the random number generator.

<br />

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/lang/String` | Group name of the [algorithm](https://developer.android.com/reference/java/util/random/package-summary#algorithms). <br /> |

### isArbitrarilyJumpable

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

```
public boolean isArbitrarilyJumpable ()
```

Return true if random generator can jump an arbitrarily specified distant
point in the state cycle.

<br />

| Returns ||
|---|---|
| `boolean` | true if random generator is arbitrarily jumpable. <br /> |

### isDeprecated

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

```
public boolean isDeprecated ()
```

Return true if the implementation of RandomGenerator (algorithm) has been
marked for deprecation.

<br />

##### Implementation Note:

- Random number generator algorithms evolve over time; new algorithms will be introduced and old algorithms will lose standing. If an older algorithm is deemed unsuitable for continued use, it will be marked as deprecated to indicate that it may be removed at some point in the future.

| Returns ||
|---|---|
| `boolean` | true if the implementation of RandomGenerator (algorithm) has been marked for deprecation <br /> |

### isHardware

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

```
public boolean isHardware ()
```

Return true if random generator uses a hardware device (HRNG) to produce
entropic input.

<br />

| Returns ||
|---|---|
| `boolean` | true if random generator is generated by hardware. <br /> |

### isJumpable

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

```
public boolean isJumpable ()
```

Return true if random generator can jump a specified distant point in
the state cycle.

<br />

| Returns ||
|---|---|
| `boolean` | true if random generator is jumpable. <br /> |

### isLeapable

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

```
public boolean isLeapable ()
```

Return true if random generator is jumpable and can leap to a very distant
point in the state cycle.

<br />

| Returns ||
|---|---|
| `boolean` | true if random generator is leapable. <br /> |

### isSplittable

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

```
public boolean isSplittable ()
```

Return true if random generator can be cloned into a separate object with
the same properties but positioned further in the state cycle.

<br />

| Returns ||
|---|---|
| `boolean` | true if random generator is splittable. <br /> |

### isStatistical

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

```
public boolean isStatistical ()
```

Return true if random generator is computed using an arithmetic
[algorithm](https://developer.android.com/reference/java/util/random/package-summary#algorithms)
and is statistically deterministic.

<br />

| Returns ||
|---|---|
| `boolean` | true if random generator is statistical. <br /> |

### isStochastic

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

```
public boolean isStochastic ()
```

Return true if random generator is computed using external or entropic
sources as inputs.

<br />

| Returns ||
|---|---|
| `boolean` | true if random generator is stochastic. <br /> |

### isStreamable

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

```
public boolean isStreamable ()
```

Return true if random generator can be used to create
`https://developer.android.com/reference/java/util/stream/Stream` of random numbers.

<br />

| Returns ||
|---|---|
| `boolean` | true if random generator is streamable. <br /> |

### name

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

```
public String name ()
```

Return the name of the [algorithm](https://developer.android.com/reference/java/util/random/package-summary#algorithms)
used by the random number generator.

<br />

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/lang/String` | Name of the [algorithm](https://developer.android.com/reference/java/util/random/package-summary#algorithms). <br /> |

### of

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

```
public static RandomGeneratorFactory<T> of (String name)
```

Returns a `https://developer.android.com/reference/java/util/random/RandomGeneratorFactory` that can produce instances of
`https://developer.android.com/reference/java/util/random/RandomGenerator` that utilize the `name`
[algorithm](https://developer.android.com/reference/java/util/random/package-summary#algorithms).

<br />

##### Implementation Requirements:

- Availability is determined by RandomGeneratorFactory using the service provider API to locate implementations of the RandomGenerator interface.

| Parameters ||
|---|---|
| `name` | `String`: Name of random number generator [algorithm](https://developer.android.com/reference/java/util/random/package-summary#algorithms) <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/util/random/RandomGeneratorFactory<T>` | `https://developer.android.com/reference/java/util/random/RandomGeneratorFactory` of `https://developer.android.com/reference/java/util/random/RandomGenerator` <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalArgumentException` | if the named algorithm is not found |
| `https://developer.android.com/reference/java/lang/NullPointerException` | if name is null |

### period

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

```
public BigInteger period ()
```

Return the period of the [algorithm](https://developer.android.com/reference/java/util/random/package-summary#algorithms)
used by the random number generator.
Returns BigInteger.ZERO if period is not determinable.

<br />

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/math/BigInteger` | BigInteger period. <br /> |

### stateBits

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

```
public int stateBits ()
```

Returns number of bits used by the [algorithm](https://developer.android.com/reference/java/util/random/package-summary#algorithms)
to maintain state of seed.

<br />

| Returns ||
|---|---|
| `int` | number of bits used by the [algorithm](https://developer.android.com/reference/java/util/random/package-summary#algorithms) to maintain state of seed. <br /> |