我有ListMap
Tuple4
作为值:
val dbCons = ListMap (
"con1" -> ("str 1", "str 2", "str 3", true)
// etc.
)
/*line A*/def testAllCon(map: ListMap[String, Tuple4[String,String, String, Boolean]]): Unit = {
map.keySet.foreach{ key =>
val prop = map.get(key).get
/*line B*/val dbSchema = DbSchema(prop._1, prop._2, prop._3, prop._4)
}
如何在“A线”进行声明,如果可能的话,在“B线”使用,更简洁。
我查了一个类似的问题here,请直接。
答案 0 :(得分:1)
您可以为4元组定义type alias
。我在这里的例子中称它为Record
,但您可能想给它一个更具描述性的名称。
此外,对于“B行”,您可以将该函数定义为模式匹配:
type Record = (String, String, String, Boolean)
val dbCons = ListMap (
"con1" -> ("str 1", "str 2", "str 3", true)
// etc.
)
// With the for-comprehension syntax
/*line A*/def testAllCon(map: ListMap[String, Record]): Unit = {
for ((key, (s1, s2, s3, b)) <- map) {
/*line B*/val dbSchema = DbSchema(s1, s2, s3, b)
}
}
// Without for-comprehension syntax
/*line A*/def testAllCon(map: ListMap[String, Record]): Unit = {
map.foreach {
case (key, (s1, s2, s3, b)) =>
/*line B*/val dbSchema = DbSchema(s1, s2, s3, b)
}
}
答案 1 :(得分:1)
正如@JackLeow指出的那样,您可以使用类型别名为元组创建一个较短的引用。
testAllCon()
方法也可以缩短。
def testAllCon(map: ListMap[String, Record]): Unit =
map.values.foreach{ prop =>
val dbSchema = DbSchema.apply _ tupled prop
}