使用Groovy获得更好的随机值

问题描述 投票:0回答:2

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

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

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

list random groovy
2个回答
1
投票

播种的例子。

在过去,我发现在生成随机数时,它们并不是“足够随机”,我尝试了一些不同的方法使它更随机。

EG

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();

1
投票

试试这个

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

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

© www.soinside.com 2019 - 2024. All rights reserved.