如何在groovy语言中逐个添加项目到数组

时间:2013-06-21 22:30:39

标签: arrays list grails groovy controller

我正在开发一个grails应用程序,我已经有一个域类“ExtendedUser”,它有关于用户的信息:“name”,“bio”,“birthDate”。现在我打算做关于用户年龄的统计数据,所以我创建了另一个控制器“StatisticsController”,其目的是将所有birthDates存储在本地数组中,这样我就可以用它来管理多个计算

class StatisticsController {
//    @Secured(["ROLE_COMPANY"])
    def teststat(){
        def user = ExtendedUser.findAll()   //A list with all of the users
        def emptyList = []    //AN empty list to store all the birthdates
        def k = 0
        while (k<=user.size()){
            emptyList.add(user[k].birthDate) //Add a new birthdate to the emptyList (The Error)
            k++
        }
        [age: user]
    }
}

当我测试时,它会显示此错误消息:无法在null对象上获取属性'birthDate' 所以我的问题是如何将所有生日存储在一个数组或列表中的最佳方法,因此我可以用它进行计算。谢谢

3 个答案:

答案 0 :(得分:10)

我更喜欢.each()尽可能在groovy中。阅读有关groovy循环here的内容。

为此尝试类似:

user.each() {
    emptylist.push(it.birthdate) //'it' is the name of the default iterator created by the .each()
}

我没有在这台计算机上设置grails环境,所以在没有经过测试的情况下,它就在我的头顶,但是试一试。

答案 1 :(得分:4)

我会用这种方法:

def birthDates = ExtendedUser.findAll().collect { it.birthDate }

collect方法转换集合的每个元素并返回转换后的集合。在这种情况下,用户正在转变为他们的出生日期。

答案 2 :(得分:0)

你可以尝试:

List dates = ExtendedUser.findAll().birthDate