scala> val x = List(1,2,3) 14:26 [3/34]
val x: List[Int] = List(1, 2, 3)
scala> val y = List("a","b","c")
val y: List[String] = List(a, b, c)
scala> x.map(xi => y.map(yi => (xi,yi)))
val res2: List[List[(Int, String)]] = List(List((1,a), (1,b), (1,c)
), List((2,a), (2,b), (2,c)), List((3,a), (3,b), (3,c)))
scala> x.flatMap(xi => y.map(yi => (xi,yi)))
val res3: List[(Int, String)] = List((1,a), (1,b), (1,c), (2,a), (2
,b), (2,c), (3,a), (3,b), (3,c))
scala> for{
| xi <- x
| yi <- y
| } yield (xi,yi)
val res0: List[(Int, String)] = List((1,a), (1,b), (1,c), (2,a), (2,b), (2,c), (3,a), (3,b), (3,c))