Reputation:
I am trying to generate random array of integers using new Stream API in Java 8. But I haven't understood this API clearly yet. So I need help. Here is my code.
Random random = new Random();
IntStream intStream = random.ints(low, high);
int[] array = intStream.limit(limit) // Limit amount of elements
.boxed() // cast to Integer
.toArray();
But this code returns array of objects. What is wrong with it?
Upvotes: 35
Views: 42754
Reputation: 3041
ThreadLocalRandom // A random number generator isolated to the current thread.
.current() // Returns the current thread's `ThreadLocalRandom` object.
.ints( low , high ) // Pass the "origin" (inclusive) and "bound" (exclusive).
.limit( 100 ) // How many elements (integers) do you want in your stream?
.toArray() // Convert the stream of `int` values into an array `int[]`.
ThreadLocalRandom
You can do it using ThreadLocalRandom
.
The ints
method generates an IntStream
within your specified bounds. Note the the low is inclusive while the high is exclusive. If you want to include your high number, just add one while calling the ints
method.
int[] randInts = ThreadLocalRandom.current().ints( low , high ).limit(100).toArray();
See this code run live at IdeOne.com.
Upvotes: 4
Reputation: 53839
If you want primitive int
values, do not call IntStream::boxed
as that produces Integer
objects by boxing.
Simply use Random::ints
which returns an IntStream
:
int[] array = new Random().ints(size, lowBound, highBound).toArray();
Upvotes: 62
Reputation: 81
To generate random numbers from range 0 to 350, limiting the result to 10, and collect as a List. Later it could be typecasted.
However, There are no guarantees on the type, mutability, serializability, or thread-safety of the List returned.
List<Object> numbers = new Random().ints(0,350).limit(10).boxed().collect(Collectors.toList());
and to get thearray of int use
int[] numbers = new Random().ints(0,350).limit(10).toArray();
Upvotes: 8
Reputation: 280141
There's no reason to boxed()
. Just receive the Stream
as an int[]
.
int[] array = intStream.limit(limit).toArray();
Upvotes: 5