2014-02-11 26 views
0
class Book { 
    String title 
} 

def book = new Book(title: 'title1') 
def book = new Book(title: 'title2') 
def book = new Book(title: 'title3') 

我該如何獲得標題集?像titleSet = ['title1', 'title2', 'title3']如何在groovy中獲得一組字段值?

我想也許像def titleSet = Book.findTitles();會工作,但我找不到像這樣的東西。

我知道我可以做的:

def books = Book.list() 
def titleSet 
for(def book : books) 
    titleSet.add(book.title) 

但是我正在尋找一種更巧妙的方式。

+3

'Book.all * .title as Set'。我想你甚至可以刪除傳播運營商。 「Book.all.title as Set'應該這樣做。 – dmahapatro

回答

3

此經過的所有書籍,他們的名稱和創建一組,而不是一個列表。

Book.all.title as Set 

UPDATE
以上將獲取所有預訂情況下,如果你只需要title這可能是沉重的。您也可以嘗試使用標準或HQL來獲取標題列表。

def titleSet = Book.createCriteria().listDistinct { 
    projections { 
     property('title') 
    } 
} 
+0

當它碰到數據庫時,它是否會單獨選擇「標題」列?或提取所有列,但過濾'標題'? –

+0

後一種情況。 – dmahapatro

3

嘗試

Set titleSet = books*.title 

或者

Set titleSet = books.collect { it.title }