Пропустить список объектов как отдельных параметров

У меня есть два метода - с именем one и two. Метод one принимает значение List<Person>, где person - некоторый класс, а метод two принимает отдельные объекты класса person.

Как передать List<Person> в качестве отдельных параметров объекта методу two? List может содержать 0 или 1 или более элементов, и я хочу передать null, если список не имеет всех трех параметров, требуемых методом 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
}

Ответы

Ответ 1

Вы можете использовать оператор распространения * для своего метода вызова, но на основе вашего комментария "Список может содержать 0 или 1 или более элементов", вы захотите использовать вариационную функцию для вашего второго метода. Попробуйте следующее:

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

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

Теперь вы можете вызвать два метода, передающих нуль, пустой список или любое количество экземпляров Person, например:

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

Ответ 2

Использование:

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'])