可能不是最好的头衔,但我会解释:
我有一个对象数组 - 让我们称之为Person
每个Person
都有一个Name
。我想分别创建一个Name
数组。
目前我有:
def peopleNames = new ArrayList<String>()
for (person in people)
{
peopleNames.add(person.name)
}
groovy是否提供了更好的方法?
答案 0 :(得分:7)
Groovy在Groovy集合上提供a collect method,这使得可以在一行中执行此操作:
def peopleNames = people.collect { it.name }
答案 1 :(得分:4)
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
}