包含列表的烫平flatMap元组

时间:2016-05-16 17:50:31

标签: scala scalding

我有以下输入元组我想flatMap:(String, List[String])

E.G。输入:

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

需要输出:

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

在Scalding / Scala中有优雅的方法吗?

2 个答案:

答案 0 :(得分:4)

您可以使用多行for ... yield表达式执行此操作:

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

答案 1 :(得分: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 , _) })