开发者

Iterate Over a tuple

开发者 https://www.devze.com 2023-02-16 18:06 出处:网络
I need to implement a generic method that takes a tuple and returns a Map Example : val tuple=((1,2),((\"A\",\"B\"),(\"C\",3)),4)

I need to implement a generic method that takes a tuple and returns a Map Example :

val tuple=((1,2),(("A","B"),("C",3)),4)

I have been trying to break this tuple into a list :

val list=tuple.productIterator.toList
Scala>list: List[Any] = List((1,2), ((A,B),(C,3)), 4)

But this way returns List[Any] .

I am trying now to find out how to iterate over the following tuple ,for example :

((1,2),(("A","B"),("C",3)),4)
开发者_开发知识库

in order to loop over each element 1,2,"A",B",...etc. How could I do this kind of iteration over the tuple


What about? :

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

Ok, the Any-problem remains. At least that´s due to the return type of productIterator.


Instead of tuples, use Shapeless data structures like HList. You can have generic processing, and also don't lose type information.

The only problem is that documentation isn't very comprehensive.


tuple.productIterator map { 
   case (a,b) => println(a,b) 
   case (a) => println(a)
}


This works for me. tranform is a tuple consists of dataframes

def apply_function(a: DataFrame) = a.write.format("parquet").save("..." + a + ".parquet")
transform.productIterator.map(_.asInstanceOf[DataFrame]).foreach(a => apply_function(a))
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号