Java 8 Generate random integers with nextInt from 0 to 100

To generate a series of random integers, you need to use a Random object. One object Random is enough to generate many numbers. Below you can find example of generating 1000 integers in interval from 0 to 100:

package number;

import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;

public class Randoma {

    public static final void main(String... aArgs) {
        //using single Random
        Random randomGenerator = new Random();

        ArrayList<Integer> items = new ArrayList<Integer>(1000);

        //generating 1000 random numbers from 1 to 100
        for (int idx = 1; idx <= 1000; ++idx) {
            int randomInt = randomGenerator.nextInt(100);
            System.out.println(randomInt);
            items.add(randomInt);
        }
        //test randomness and print the result
        count(items);
    }
    
    // group count the list items and print them
    private static void count(List<Integer> items) {
        Map<Integer, Long> result =
                items.stream().collect(
                        Collectors.groupingBy(
                                Function.identity(), Collectors.counting()
                        )
                );
        //print the number and how much times is generated
        result.forEach((item, value) -> System.out.println(item + " - " + value));
    }
}

In the above code we are generating 1000 random numbers. We see that:

int randomInt = randomGenerator.nextInt(100);

generates some random numbers which satisfy the general case. In next section we will test the randomness.

Java 8 Generate random integers in range

Generating random numbers in range can be done by nextInt as well. The example below shows how to generate random numbers from 20 to 100:

package number;

import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;

public class Randoma {

    public static final void main(String... aArgs) {

        ArrayList<Integer> itemsR = new ArrayList<Integer>(1000);

        //generating 1000 random numbers from 20 to 100
        for (int idx = 1; idx <= 1000; ++idx) {
            int randomInt = randomRange(20, 100);
            System.out.println(randomInt);
            itemsR.add(randomInt);
        }
        //test randomness and print the result
        count(itemsR);
    }

    // group count the list items and print them
    private static void count(List<Integer> items) {
        Map<Integer, Long> result =
                items.stream().collect(
                        Collectors.groupingBy(
                                Function.identity(), Collectors.counting()
                        )
                );
        //System.out.println(result);
        //result.forEach((item,value)->System.out.println("number: " + item + " ís found: " + value));
        result.forEach((item, value) -> System.out.println(item + " - " + value));
    }

    //generate random numbers in range
    private static int randomRange(int min, int max) {

        if (min >= max) {
            throw new IllegalArgumentException("Min parameter can't be bigger than Max");
        }

        Random r = new Random();
        return r.nextInt((max - min) + 1) + min;
    }
}

Java 8 test nextInt randomness

Testing randomness is done by method count:

    private static void count(List<Integer> items) {
        Map<Integer, Long> result =
                items.stream().collect(
                        Collectors.groupingBy(
                                Function.identity(), Collectors.counting()
                        )
                );
        //print the number and how much times is generated
        result.forEach((item, value) -> System.out.println(item + " - " + value));
    }

It do group count of the element list and print them in the console. After several executions this is the average result:

random

As we can see the spread of the generated numbers is equal. Which guarantee that this method satisfy most daily problems related to random integers in java.