RandomGenerator.StreamableGenerator (Java SE 17 & JDK 17)
Description: declaration: module: java.base, package: java.util.random, interface: RandomGenerator, interface: StreamableGenerator
Keywords: java.util.random.RandomGenerator.StreamableGenerator interface

Module java.base
Package java.util.random

# Interface RandomGenerator.StreamableGenerator

All Superinterfaces:
  `RandomGenerator`

All Known Subinterfaces:
  `RandomGenerator.ArbitrarilyJumpableGenerator`, `RandomGenerator.JumpableGenerator`, `RandomGenerator.LeapableGenerator`, `RandomGenerator.SplittableGenerator`

All Known Implementing Classes:
  `SplittableRandom`

Enclosing interface:
  RandomGenerator

public static interface RandomGenerator.StreamableGenerator extends RandomGenerator
The `RandomGenerator.StreamableGenerator` interface augments the `RandomGenerator` interface to provide methods that return streams of `RandomGenerator` objects. Ideally, such a stream of objects would have the property that the behavior of each object is statistically independent of all the others. In practice, one may have to settle for some approximation to this property.

A generator that implements interface `RandomGenerator.SplittableGenerator` may choose to use its `splits`() method to implement the `rngs`() method required by this interface.

A generator that implements interface `RandomGenerator.JumpableGenerator` may choose to use its `jumps`() method to implement the `rngs`() method required by this interface.

A generator that implements interface `RandomGenerator.LeapableGenerator` may choose to use its `leaps`() method to implement the `rngs`() method required by this interface.

Objects that implement `RandomGenerator.StreamableGenerator` are typically not cryptographically secure. Consider instead using `SecureRandom` to get a cryptographically secure pseudo-random number generator for use by security-sensitive applications.

- ## Nested Class Summary

  ## Nested classes/interfaces declared in interface java.util.random.RandomGenerator

  `RandomGenerator.ArbitrarilyJumpableGenerator, RandomGenerator.JumpableGenerator, RandomGenerator.LeapableGenerator, RandomGenerator.SplittableGenerator, RandomGenerator.StreamableGenerator`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `static RandomGenerator.StreamableGenerator`
  `of(String name)`
  Returns an instance of `RandomGenerator.StreamableGenerator` that utilizes the `name` algorithm.
  `Stream<RandomGenerator>`
  `rngs()`
  Returns an effectively unlimited stream of objects, each of which implements the `RandomGenerator` interface.
  `default Stream<RandomGenerator>`
  `rngs(long streamSize)`
  Returns an effectively unlimited stream of objects, each of which implements the `RandomGenerator` interface.

  ### Methods declared in interface java.util.random.RandomGenerator

  `doubles, doubles, doubles, doubles, ints, ints, ints, ints, isDeprecated, longs, longs, longs, longs, nextBoolean, nextBytes, nextDouble, nextDouble, nextDouble, nextExponential, nextFloat, nextFloat, nextFloat, nextGaussian, nextGaussian, nextInt, nextInt, nextInt, nextLong, nextLong, nextLong`

- ## Method Details

  - ### of

    static RandomGenerator.StreamableGenerator of(String name)
    Returns an instance of `RandomGenerator.StreamableGenerator` that utilizes the `name` algorithm.
    Parameters:
      `name` - Name of random number generator algorithm
    Returns:
      An instance of `RandomGenerator.StreamableGenerator`
    Throws:
      `NullPointerException` - if name is null
      `IllegalArgumentException` - if the named algorithm is not found

  - ### rngs

    Stream<RandomGenerator> rngs()
    Returns an effectively unlimited stream of objects, each of which implements the `RandomGenerator` interface. Ideally the generators in the stream will appear to be statistically independent. The new generators are of the same algorithm as this generator.
    Implementation Note:
      It is permitted to implement this method in a manner equivalent to `rngs` (`Long.MAX_VALUE`).
    Returns:
      a stream of objects that implement the `RandomGenerator` interface

  - ### rngs

    default Stream<RandomGenerator> rngs(long streamSize)
    Returns an effectively unlimited stream of objects, each of which implements the `RandomGenerator` interface. Ideally the generators in the stream will appear to be statistically independent. The new generators are of the same algorithm as this generator.
    Implementation Requirements:
      The default implementation calls `rngs`() and then limits its length to `streamSize`.
    Parameters:
      `streamSize` - the number of generators to generate
    Returns:
      a stream of objects that implement the `RandomGenerator` interface
    Throws:
      `IllegalArgumentException` - if `streamSize` is less than zero