2016-01-20 29 views
-1

在列表中的所有元素對於這種情況尋找基於對實例變量的標準在Groovy

class A { 
    List<B> bList 
} 

class B { 
    Long chainId 
} 

我想從A類的一個實例獲得B類項目,如果chainId存在於chainIdList。當我使用

a.bList*.find { chainIdList.contains(it.chainId) } 

我得到一個錯誤:查詢未返回唯一結果:4 在我看來,與其常規方法「發現」,Grails的GORM方法被調用,所以我得到的所有對於A中的2個B元素的每個,從數據庫的類型B的行(此刻爲4)。 任何建議/見解?

+0

,我不能讓這個問題的意義。 'List B'應該是'List bList'嗎?什麼是'chainIdList'? –

+0

你是對的傑夫。沒有把這個說得對。編輯代碼。而chainIdList是我正在尋找的chainIds列表。 –

回答

0

你列表中的每個元素上調用find,而不是名單本身

卸下*,即

a.bList.find { chainIdList.contains(it.chainId) } 

還是要找到所有匹配的元素

a.bList.findAll { chainIdList.contains(it.chainId) } 
+0

謝謝蒂姆。非常有意義。但是當我嘗試這個時,我只能從bList中獲得一個項目。 chainIdList作爲兩個ID,並且bList中有相應的對象(2)。不知道爲什麼我不能同時獲取。 –

+2

'find'返回第一個匹配。如果你需要所有的匹配,那麼使用'findAll'而不是'find' @AnupTripathi – dmahapatro