[英]New to Scala, better/idiomatic way than reduceLeft to find max (key,val) in collection?
[英]Any better, more idiomatic way to convert SQL ResultSet to a Scala List or other collection type?
我正在使用以下天真代码将ResultSet
转换为Scala List
:
val rs = pstmt.executeQuery()
var nids = List[String]()
while (rs.next()) {
nids = nids :+ rs.getString(1)
}
rs.close()
是否有一种更好的方法,对于Scala更为惯用,不需要使用可变对象?
你为什么不试试这个:
new Iterator[String] {
def hasNext = resultSet.next()
def next() = resultSet.getString(1)
}.toStream
从这个答案采取这里
我有类似的问题,我的解决方案是:
Iterator.from(0).takeWhile(_ => rs.next()).map(_ => rs.getString(1)).toList
希望有所帮助。
在评论部分中使用像slick
或Quill
这样的ORM工具被认为是更好的方法。
如果要使用Scala代码处理ResultSet。您可以使用tailRecursion
。
@scala.annotation.tailrec def getResult(resultSet: ResultSet, list: List[String] = Nil): List[String] = { if (resultSet.next()) { val value = resultSet.getString(0) getResult(resultSet, value :: list) } else { list } }
此方法返回包含第0位列值的字符串列表。 这个过程是纯不可变的,所以你不必担心。在正面,这个方法是尾递归,所以Scala会相应地在内部优化这个方法。
谢谢
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.