从ResultSet生成列表

我不完全确定这是可能的,我绝对不知道要搜索什么或者如何简洁地解释它,但是这似乎是相当可怕的事情,如果可能的话,我不会感到惊讶。

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

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

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

是这样的可能吗?

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 

使用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() 

另见: buildSequence()

刚刚发生,我也可以使用generateSequence 。 道具到Jayson更快到达^^

这是我想出的(没有测试,但相当短):

 val list = generateSequence { if(!resultSet.next()) null else resultSet.getInt(1) }.toList()