Groovy方法从列表中获取随机元素

时间:2017-09-04 09:18:53

标签: list grails random groovy

Groovy非常强大,可以管理集合。我有一个像这样的列表:

10.times{
    Person person = new Person(
    name: nameList.get() //I WANT TO GET A RANDOM NAME FROM THE LIST
    )
}

我要做的是迭代10次以从第一个列表中获得具有随机名称的10个人。

%timeit

这有两个显而易见的原因,我没有在nameList.get中添加任何索引,而且我没有创建10个不同的Person对象。

  1. 如何使用groovy从名单中获取随机元素?
  2. 我可以使用groovy的集合属性创建一个包含10个随机名称的人的列表(以简单的方式)吗?

1 个答案:

答案 0 :(得分:12)

只需使用Java方法Collections.shuffle(),如

class Person {
    def name
}

def nameList = ["Jon", "Mike", "Alexia"]
10.times {
    Collections.shuffle nameList
    Person person = new Person(
        name: nameList.first()
    )
    println person.name
}

或使用像

这样的随机索引
class Person {
    def name
}

def nameList = ["Jon", "Mike", "Alexia"]
def nameListSize = nameList.size()
def r = new Random()
10.times {
    Person person = new Person(
        name: nameList.get(r.nextInt(nameListSize))
    )
    println person.name
}