将对象列表作为单个参数传递

时间:2015-12-31 10:36:38

标签: groovy parameters

我有两种方法 - 名为onetwo。方法one需要List<Person>,其中person是某个类,方法two采用Person类的单个对象。

如何将List<Person>作为单个对象参数传递给方法twoList可以包含0个或1个或更多元素,如果列表没有方法null所需的所有3个参数,我想传递two

def one (List<Person> persons) {

    // check the size of the list
    // pass arguments to method two

    // this works
    two(persons[0], persons[1], persons[2])

    //what I want is 
    two(persons.each { it  + ', '})
}

def two (Person firstPerson, Person secondPerson, Person thirdPerson) {

    // do something with the persons
}

2 个答案:

答案 0 :(得分:11)

使用:

two(*persons)

*将拆分列表并将其元素作为单独的参数传递。

它将是:

def one (List<String> strings) {
    two(strings[0], strings[1], strings[2])
    two(*strings)
}

def two (String firstPerson = null, String secondPerson = null, String thirdPerson = null) {
   println firstPerson
   println secondPerson
   println thirdPerson 
}

one(['a','b','c'])

答案 1 :(得分:8)

你可以使用传播操作符*作为你的调用方法,但是根据你的注释&#34;列表可以包含0或1个或更多元素&#34;您将需要为第二种方法使用可变参数函数。试试这个:

// Spread operator "*"
def one(List<Person> persons) {
  two(*persons)
}

//  Variadic function "..."
def two(Person... values) {
  values.each { person ->
    println person
  }
}

现在你可以调用两个方法传递null,一个空列表或任意数量的Person实例,例如:

two(null)
two([])
two(person1, person2, person3, person4, person5)