2013-06-21 62 views
3

我正在開發grails應用程序,並且我已經有一個域類「ExtendedUser」,它具有有關用戶的信息,如「name」,「bio」,「生日」。現在I'm規劃辦user's年齡統計,所以我創造了另一種控制器「StatisticsController」和想法是所有的生辰八字存儲在本地陣列,所以我可以用它如何在Groovy語言中逐個添加項目

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] 
    } 
} 

管理多個計算當我測試時,它向我顯示了這個錯誤消息:無法獲得空對象上的屬性'birthDate' 所以我的問題是如何將所有的生日存儲在單個數組或列表中,所以我可以使用它進行計算。謝謝

+2

所有這些替代解決方案的工作,但你得到錯誤的原因是你讓k經過循環,當它等於user.size(),並且用戶[k]在那一點是關閉列表。如果user.size()== 3,則存在用戶[0],用戶[1]和用戶[2],但不存在用戶[3]。將k <=更改爲k <,您的代碼將起作用。 – billjamesdev

回答

0

你可以嘗試:

List dates = ExtendedUser.findAll().birthDate 
9

我喜歡。每()在常規儘可能地。閱讀關於groovy循環here

對於這種嘗試是這樣的:

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

我沒有一個Grails環境設置這臺計算機上,這樣是對我的頭頂部沒有被測試,但給它一個鏡頭。

+0

什麼「推」應該做的? – GeekyTrash

+0

Push將該值添加到數組中。我強烈建議您至少簡要閱讀一下您要使用的數據類型的文檔。 [Groovy列表文檔](http://groovy.codehaus.org/groovy-jdk/java/util/List.html) –

+0

謝謝,這似乎工作得很好,只是我已經看到了文檔。和IDK爲什麼說「push」返回布爾值。再次比你 – GeekyTrash

4

我想使用這種方法:

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

collect方法變換集合中的每個元素,並返回變換集合。在這種情況下,用戶正在轉變爲他們的出生日期。

相關問題