如何在Java 8中生成具有指定范围内随机整数大小的列表?

时间:2019-05-18 14:01:39

标签: java arraylist random java-8 java-stream

我想生成一个在指定范围和一定大小之间的随机数列表。

我尝试使用流,并且我认为这可能是最好的解决方案。我无法自己使用它,但是我对流的了解还不够。

以下代码可解决我的问题,但我希望能够使用Java api中的某些功能。如果要使用流的map方法,则需要使用带有n -> ThreadLocalRandom.current().nextInt(min, max + 1)的使用者,但是我无法在流的末尾适当收集数据。

import java.util.*;
import java.util.concurrent.ThreadLocalRandom;

class Scratch {
    public static void main(String[] args) {
        System.out.println(getRandList(100, 0, 10));
    }

    /**
     * Get n random integers within the range of min and max
     */
    static List<Integer> getRandList(int size, int min, int max) {
        List<Integer> integers = new ArrayList<>(size);
        for (int i = 0; i < size; i++) {
            integers.add(ThreadLocalRandom.current().nextInt(min, max + 1));
        }
        return integers;
    }
}

引用的重复项不能直接解决我的问题,我想要一个List<Integer>,而Oleksandr的解决方案提供了一个IntStream

3 个答案:

答案 0 :(得分:1)

怎么样,

List<Integer> integers = IntStream.range(0, size)
    .mapToObj(i -> ThreadLocalRandom.current().nextInt(min, max + 1))
    .collect(Collectors.toList());

答案 1 :(得分:0)

您拥有“随机”类,用于获取随机数。

示例:

Random random = new Random();
random.nextInt(bound);

之后,循环执行此操作。

答案 2 :(得分:0)

这是我的第一个念头-

List<Integer> nums = Arrays.asList(1,2,3,4,5);

List<Integer> list = nums.stream().map(n->ThreadLocalRandom.current().nextInt(0,11)).collect(Collectors.toList());

System.out.println(list);