将未知长度的元组转换为Scala中的List

时间:2018-03-07 10:03:44

标签: scala

我需要一个接收未知长度的元组(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)
}

您能否帮助修复上述示例或提出另一种解决方案?

2 个答案:

答案 0 :(得分:7)

所有TupleN类型都来自Product,而Product的方法为productIteratordocumentation 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,如上所示。