如何创建可复制的随机数

vdgimpew  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(373)

如何在Java8+并行流中创建可复制的随机数?
例子:

Random r = new Random(1337);

Arrays.stream(new int[]{1,2,3})
.parallel()
.map(i -> i + r.nextInt(10))
.forEach(i -> System.out.println(i));
``` `Random` 以及 `ThreadLocalRandom` 如果我执行了几次,就不会生成相同的序列。
我期望的结果是,如果我多次执行这个代码段,我总是得到相同的输出。我不需要一个随机的整数序列。我需要相同的随机数是为相同的 `i` .
wwwo4jvm

wwwo4jvm1#

更新:

根据霍尔格的宝贵意见,以下是正确的做法:

Arrays.stream(new int[]{1,2,3})
.parallel()
.map(i -> i + new Random(i).nextInt(10))
.forEach(i -> System.out.println(i));

使用 i 作为种子,即。 .map(i -> i + new Random(i).nextInt(10)) 对于一个特定的变量,仍然可以重复地得到相同的随机数 i ,但不是 new Random(1337).nextInt(10) .

原始答案:

按以下步骤操作:

Arrays.stream(new int[]{1,2,3})
.parallel()
.map(i -> i + new Random(1337).nextInt(10))
.forEach(i -> System.out.println(i));

演示:

import java.util.Arrays;
import java.util.Random;

public class Main {
    public static void main(String args[]) {
        for (int k = 1; k <= 100; k++) {
            Arrays.stream(new int[]{1,2,3})
            .parallel()
            .map(i -> i + new Random(1337).nextInt(10))
            .forEach(i -> System.out.println(i));
        }
    }
}

相关问题