ResultSet
不具備進行此類轉換的最佳界面。但它看起來是這樣的:
val list = resultSet.use {
generateSequence {
if (resultSet.next()) resultSet.getInt(1) else null
}.toList() // must be inside the use() block
}
// resultSet is already closed automatically at this point
參見:generateSequence()
如果你想離開它作爲一個Sequence
代替List
懶洋洋地處理它,你不能使用.use()
自動關閉助手。
val seq = generateSequence {
if (resultSet.next()) resultSet.getInt(1) else null
}
// later remember to call resultSet.close(), since the resultSet is still open
隨着科特林1.1實驗coroutines您可以:
val seq = buildSequence {
while (resultSet.next()) {
yield(resultSet.getInt(1))
}
// resultSet.close() might work ok here
}
// if not, later remember to resultSet.close()
參見:buildSequence()
如果你想爲映射'ResultSet'到一個通用的解決方案'Iterable'或'List',有很多方法可以定義擴展函數。否則,由於'ResultSet'沒有擴展這些在Kotlin中易於使用的接口,如果你只需要這樣做一次,那麼只需遍歷該集合並將每個元素添加到可變列表中的簡單解決方案可能就是最好的。 – zsmb13
@ zsmb13是的,我添加了一個擴展函數並按照你在這種情況下的建議實現它,但是我的問題更多的是出於這個特定用例提示的好奇心,而不是特別關於ResultSets –