scala - 如何在scala中解析地图列表
问题描述
我正在尝试从如下配置的 Map 列表中检索值。
val tabColMapping = List( Map("table" ->"Emp") -> Map("keyCol" -> "EmpId", "orderingCol" -> "dob"),
Map("table" -> "Dept") -> Map("keyCol" -> "deptId", "orderingCol" -> "branch"))
试图为每个输入表名获取两个不同变量中的 keyCol 和 orderingCol 值。所以如果我输入“EMP”,它会给我
val kc = EmpId
val oc = dob
解决方案
好吧,伙计,这些是你在那里得到的一些混乱的配置,你应该尝试输出一个更好的类型,但是你可以做这样的事情:
def getMessyConfigs(input: String): List[Option[(String, String)]] = tabColMapping.map(
mapsTuple =>
if (mapsTuple._1.values.toList.contains(input)) {
//I guess this config names never change
val maybeKC: Option[String] = mapsTuple._2.get("keyCol")
val maybeOC: Option[String] = mapsTuple._2.get("orderingCol")
// This will retrieve if both exist otherwise will return None
for {
kc <- maybeKC
oc <- maybeOC
} yield {
(kc, oc)
}
} else None
)
println(getMessyConfigs("Emp"))// this will output a List[Option(String, String)]], you can add the .headOption.flatten at the end of the function if you prefer ( and if you only expect one)
// If you feel brave enough you can do a get, but I don't recommend
val (kc, oc): (String, String) = getMessyConfigs("Emp").headOption.flatten.get
推荐阅读
- python - Flask Appbuilder 运行错误:“IndexError:列表索引超出范围”
- informix - 如何将初始块添加到 informix 数据库空间?
- python-2.7 - 获得独特的价值?
- angular2-forms - FormControl 或自定义指令
- javascript - 如何在没有 && 运算符的情况下使代码有效?
- python - 一个序列的真值是模棱两可的:使用
- c++ - 生成从 2 到 10,000 的数字。打印的数字只能是 2 个素数的倍数
- python - 使用管道对文本数据进行 SHAP KernelExplainer 错误
- javascript - 如果不使用,是否不创建闭包变量?
- lisp - 在 lisp 中将 ' 转换为引号