我需要实现一个带有元组并返回Map的泛型方法 示例:
val tuple=((1,2),(("A","B"),("C",3)),4)
我一直试图将这个元组分解为一个列表:
val list=tuple.productIterator.toList
Scala>list: List[Any] = List((1,2), ((A,B),(C,3)), 4)
但这种方式会返回List [Any]。
我现在正在尝试找出如何迭代以下元组,例如:
((1,2),(("A","B"),("C",3)),4)
为了遍历每个元素1,2,“A”,B“,......等。我怎样才能对元组进行这种迭代
答案 0 :(得分:14)
怎么样? :
def flatProduct(t: Product): Iterator[Any] = t.productIterator.flatMap {
case p: Product => flatProduct(p)
case x => Iterator(x)
}
val tuple = ((1,2),(("A","B"),("C",3)),4)
flatProduct(tuple).mkString(",") // 1,2,A,B,C,3,4
好的,Any
问题仍然存在。至少这是由于productIterator
的返回类型。
答案 1 :(得分:2)
tuple.productIterator map {
case (a,b) => println(a,b)
case (a) => println(a)
}
答案 2 :(得分:2)
使用Shapeless数据结构(如HList)代替元组。您可以进行通用处理,也不会丢失类型信息。
唯一的问题是文档不是很全面。
答案 3 :(得分:0)
这对我有用。 tranform是一个由数据帧组成的元组
def apply_function(a: DataFrame) = a.write.format("parquet").save("..." + a + ".parquet")
transform.productIterator.map(_.asInstanceOf[DataFrame]).foreach(a => apply_function(a))