在现有数组中创建项的属性数组

时间:2011-06-14 12:28:02

标签: arrays groovy type-conversion

可能不是最好的头衔,但我会解释:
我有一个对象数组 - 让我们称之为Person 每个Person都有一个Name。我想分别创建一个Name数组。

目前我有:

def peopleNames = new ArrayList<String>()

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

groovy是否提供了更好的方法?

4 个答案:

答案 0 :(得分:7)

Groovy在Groovy集合上提供a collect method,这使得可以在一行中执行此操作:

def peopleNames = people.collect { it.name }

答案 1 :(得分:4)

spread operator

def peopleNames = people*.name

答案 2 :(得分:2)

最简洁的方法是使用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

这是一个比spread operator suggestion短的整个字符。但是,IMO的sperad运算符和collect{}解决方案都更具可读性,特别是对Java程序员而言。

答案 3 :(得分:1)

你为什么不尝试这个?我喜欢这个,因为它是如此可以理解

def people = getPeople() //Method where you get all the people
def names = []
people.each{ person ->
   names << person.name
}