我需要一个接收未知长度的元组(Tuple2,Tuple3或TupleX)并返回元组元素列表的方法。我编写了以下方法,但是我收到一个错误,它无法在列表中将Any
类型转换为String
:
def toList(tuple: Product): List[String] = tuple match {
case (s1, s2) => List(s1, s2)
case (s1, s2, s3) => List(s1, s2, s3)
}
您能否帮助修复上述示例或提出另一种解决方案?
答案 0 :(得分:7)
所有TupleN
类型都来自Product
,而Product
的方法为productIterator
(documentation link),因此您可以写:
def toList(tuple: Product): List[String] =
tuple.productIterator.map(_.asInstanceOf[String]).toList
请注意,这不是类型安全的。每当你传递任何不是String
元组的东西时,它都会抛出错误。您可能希望改为呼叫_.toString
。
答案 1 :(得分:1)
如果您不确定输入是否为字符串或其他内容,则可以尝试此操作:
def toList(tuple: Product): List[String] = {
tuple.productIterator.map(_.toString).toList
}
toList("1",2,3.0)
上面的方法适用于String,Int,Double,如上所示。