Unlimited stream of pseudorandom values

If we want to create unlimited streams of pseudorandom values, we can rely on the methods of Random, such as ints(), longs(), and doubles(). For example, an unlimited stream of pseudorandom integer values can be declared as follows (the generated integers will be in the [1, 100] range):

IntStream rndInfStream = new Random().ints(1, 100);

Trying to fetch a list of 10 even pseudorandom integer values can rely on this stream:

List<Integer> result = rndInfStream
.filter(i -> i % 2 == 0)
.limit(10)
.boxed()
.collect(Collectors.toList());

One possible output is as follows:

8, 24, 82, 42, 90, 18, 26, 96, 86, 86

This time, it is harder to say how many numbers were actually generated until the aforementioned list is collected.

Another flavor of ints() is ints​(long streamSize, int randomNumberOrigin, int randomNumberBound). The first argument allows us to specify how many pseudorandom values should be generated. For example, the following stream will generate exactly 10 values in the range of [1, 100]:

IntStream rndInfStream = new Random().ints(10, 1, 100);

We can fetch the even values from these 10, as follows:

List<Integer> result = rndInfStream
.filter(i -> i % 2 == 0)
.boxed()
.collect(Collectors.toList());

One possible output is as follows:

80, 28, 60, 54

We can use this example as a base for generating random strings of a fixed length, as follows:

IntStream rndInfStream = new Random().ints(20, 48, 126);
String result = rndInfStream
.mapToObj(n -> String.valueOf((char) n))
.collect(Collectors.joining());

One possible output is as follows:

AIW?F1obl3KPKMItqY8>
Stream.ints() comes with two more flavors: one that doesn't take any argument (an unlimited stream of integers) and another that takes a single argument representing the number of values that should be generated, that is, ints​(long streamSize).
..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
52.14.151.45