gpt4 book ai didi

scala - 从数据库表中填充 Scala 不可变映射

转载 作者:行者123 更新时间:2023-12-04 21:54:27 25 4
gpt4 key购买 nike

我有一个具有以下结构的 SQL 数据库表:

create table category_value (
category varchar(25),
property varchar(25)
);

我想将其读入 Scala Map[String, Set[String]]其中 map 中的每个条目都是同一类别中所有属性值的集合。
我想以没有可变数据(数据库结果集除外)的“功能”风格来做。

关注 Clojure loop构造,这是我想出的:
def fillMap(statement: java.sql.Statement): Map[String, Set[String]] = {
val resultSet = statement.executeQuery("select category, property from category_value")

@tailrec
def loop(m: Map[String, Set[String]]): Map[String, Set[String]] = {
if (resultSet.next) {
val category = resultSet.getString("category")
val property = resultSet.getString("property")
loop(m + (category -> m.getOrElse(category, Set.empty)))
} else m
}

loop(Map.empty)
}

有没有更好的方法来做到这一点,而不使用可变数据结构?

最佳答案

如果你喜欢,你可以尝试一些东西

def fillMap(statement: java.sql.Statement): Map[String, Set[String]] = {
val resultSet = statement.executeQuery("select category, property from category_value")
Iterator.continually((resultSet, resultSet.next)).takeWhile(_._2).map(_._1).map{ res =>
val category = res.getString("category")
val property = res.getString("property")
(category, property)
}.toIterable.groupBy(_._1).mapValues(_.map(_._2).toSet)
}

未经测试,因为我没有合适的 sql.Statement .和 groupBy部分可能需要更多的爱才能看起来不错。

编辑 :添加了请求的更改。

关于scala - 从数据库表中填充 Scala 不可变映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4927260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com