使用Groovy获得更好的随机值

时间:2019-03-01 12:43:48

标签: list random groovy

我使用以下Groovy代码从列表中选择随机元素。

Random rnd = new Random()
log.info("Random element:" + list[rnd.nextInt(list.size)])

在大多数情况下,我将上一个或下一个元素作为“随机”值。

2 个答案:

答案 0 :(得分:1)

尝试一下

def <T> T getRandomElement(List<T> list) {
    if (list) {
        Collections.shuffle(list)
        list.first()
    }
}

请注意,Collections.shuffle对列表进行了突变。如果在其他地方有对列表的引用,这可能很重要。

答案 1 :(得分:1)

带有种子的示例。

过去,我发现生成随机数时,它们还不够“随机”,因此我尝试了几种不同的方法来使其更随机。

例如

Date date = new Date();
def now = date.getTime();
log.info(now);  // This value is the number of millis since January 1, 1970

Random rnd = new Random();
rnd.setSeed(now); // Seed the Random with the millis value

def play = randomValue.nextInt(10);  // Value in brackets is the max number of interest
log.info(play);

当不在范围内工作并且只需要一个x位数的随机值时,我已经做了类似...

randomValue = new Random();
val1 = randomValue.nextInt(10);
val2 = randomValue.nextInt(10);
val3 = randomValue.nextInt(10);
val4 = randomValue.nextInt(10);
val5 = randomValue.nextInt(10);

orderRef = val1.toString() + val2.toString() + val3.toString()+ val4.toString()+ val5.toString();