从ResultSet生成列表

Ste*_*wes 7 jdbc kotlin

我不完全确定这是可能的,我绝对不知道要搜索什么或如何简明扼要地解释它,但这似乎是一个很好的事情,如果可能的话我不会感到惊讶.

我想实例化一个列表,listOf()但不是提供列表的元素,而是提供一些代码来生成列表的元素.

例如,使用ResultSet :(这不是有效代码)

val list: List<Int> = listOf(
    while(resultSet.next()){
        return resultSet.getInt(1)
    }
)
Run Code Online (Sandbox Code Playgroud)

这样的事情可能吗?

Jay*_*ard 12

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
Run Code Online (Sandbox Code Playgroud)

也可以看看: 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
Run Code Online (Sandbox Code Playgroud)

使用Kotlin 1.1实验协同程序,您可以:

val seq = buildSequence {
    while (resultSet.next()) {
        yield(resultSet.getInt(1))
    }

    // resultSet.close() might work ok here
}

// if not, later remember to resultSet.close()
Run Code Online (Sandbox Code Playgroud)

也可以看看: buildSequence()