我有一個數據庫,一組行,我想提供通過它們旋轉這樣的接口:斯卡拉:通過發電機暴露一個JDBC結果(迭代器)
def findAll: Iterable[MyObject]
我們不需要同時在內存中存儲所有實例。在C#中,您可以使用yield輕鬆創建類似這樣的生成器,編譯器負責將遍歷記錄集的代碼轉換爲迭代器(將其反轉)。
我當前的代碼如下所示:
def findAll: List[MyObject] = {
val rs = getRs
val values = new ListBuffer[MyObject]
while (rs.next())
values += new valueFromResultSet(rs)
values.toList
}
有沒有一種方法,我可以將它轉換爲不存儲在內存中整個集合?也許我可以用一個理解?
我會給出一個鏡頭,thx Rex – 2010-01-20 16:33:16
我只是假設rs實際上有一個「hasNext」方法。如果沒有,你應該在迭代器中緩存下一個結果(可能是私有的),並讓hasNext指出是否存在緩存的結果。 – 2010-01-20 16:40:15
是的,那有用,我用hasNext = rs.isLast。一個麻煩是,雖然我沒有任何機制來關閉rs和連接。在我當前的代碼中,我已經將(上面的)代碼封裝在一個「使用」方法中,該方法爲我關閉了一些東西。 – 2010-01-20 16:42:25