Пропустить список объектов как отдельных параметров
У меня есть два метода - с именем 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'])