2016-05-16 91 views
1

烫flatMap元组我有,我想下面的输入元组flatMap:(String, List[String])包含列表

E.G.输入:

("a", ["1", "2"]) 
("b", ["3", "4"]) 

所需输出:

("a", "1") 
("a", "2") 
("b", "3") 
("b", "4") 

有一种优雅的方式在滚烫/斯卡拉做到这一点?

回答

1

可能不是最好的解决方案,但级联地图,然后平坦的结果是最好的,我可以想出。

有关FP的令人生畏的事情是,你可以用非常不同的方式做同样的事情。希望有人张贴了不同的解决

val input = List(("a", List("1", "2")), ("b", List("3","4"))) 

val output = input.map(it => it._2.map { (it._1, _)}).flatten 

指示的输出可以换到

input.flatMap(tuple => tuple._2.map { (tuple._1 , _) }) 
+1

无需压扁,如果你flatMap。 – pedrofurla

4

您可以用多线做for ... yield表达:

for { 
    (a, bs) <- tupleList 
    b <- bs 
} yield (a, b)