Создание массива свойств элементов в существующем массиве - PullRequest
1 голос
/ 14 июня 2011

Наверное, не самый лучший заголовок, но я объясню:
У меня есть массив объектов - давайте назовем их Person.
Каждый Person имеет Name. Я хочу создать массив Name соответственно.

В настоящее время у меня есть:

def peopleNames = new ArrayList<String>()

for (person in people)
{
    peopleNames.add(person.name)
}

Предоставляет ли groovy лучшее средство для этого?

Ответы [ 4 ]

7 голосов
/ 14 июня 2011

Groovy предоставляет метод сбора для коллекций Groovy, который позволяет сделать это в одну строку:

def peopleNames = people.collect { it.name }
4 голосов
/ 14 июня 2011

Или оператор распространения :

def peopleNames = people*.name
2 голосов
/ 14 июня 2011

Самый краткий способ сделать это - использовать выражение GPath

// Create a class and use it to setup some test data
class Person {

  String name
  Integer age
}

def people = [new Person(name: 'bob'), new Person(name: 'bill')]

// This is where we get the array of names
def peopleNames = people.name

// Check that it worked
assert ['bob', 'bill'] == peopleNames

Это на целый символ короче, чем предложение оператора распространения .Тем не менее, IMO и оператор sperad, и решения collect{} более читабельны, особенно для программистов на Java.

1 голос
/ 14 июня 2011

Почему бы тебе не попробовать это?Мне нравится этот, потому что это так понятно

def people = getPeople() //Method where you get all the people
def names = []
people.each{ person ->
   names << person.name
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...