web-dev-qa-db-ja.com

リストからランダムな要素を取得するGroovyメソッド

Groovyは、コレクションを管理する非常に強力です。私はこのようなリストを持っています:

def nameList = ["Jon", "Mike", "Alexia"]

私がやろうとしているのは、最初のリストからランダムな名前の10人を取得するために10回繰り返すことです。

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

これは2つの明らかな理由で機能していません。nameList.getにインデックスを追加しておらず、10個の異なるPersonオブジェクトを作成していません。

  1. Groovyを使用して名前リストからランダムな要素を取得するにはどうすればよいですか?
  2. Groovyのコレクションプロパティを使用して、ランダムな名前の10人のリストを(簡単な方法で)作成できますか?
8
Blazerg

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
}
15
Vampire