scala,zip中的嵌套序列迭代

时间:2018-01-22 17:52:28

标签: scala functional-programming scala-collections

我有以下案例类

case class Outer(outerId: Integer, outerName: String, innerSeq:Seq[Inner]) 
case class Inner(innerName:String, innerAge: Integer, innerId: Integer)

我创建了以下实例

val innerSeq1 = Seq(Inner("in10",10, 0),Inner("in11",11, 1), Inner("in12",12, 2))
val innerSeq2 = Seq(Inner("in20",10, 0),Inner("in21",11, 1), Inner("in22",12, 2))
val outerSeq = Seq(Outer(1, "out1", innerSeq1), Outer(2, "out2", innerSeq2 ))

我的目的是创建像这样的3元素3元组,我不确定我是否可以使用Zip或优雅地执行此操作(我知道地图然后地图可以进行迭代但我不清楚将如何我得到以下类型的输出)

我想要以下格式的3元组 (name of outer, name of inner, id of inner) Seq( (out1, in10, 0), (out1, in11, 1), (out1, in12, 2), (out2, in20, 0), (out2, in21, 1), (out2, in22, 2) ) 基本上我想在迭代outersequence的同时,想要形成三元组并获得这个扁平的三个连音输出

1 个答案:

答案 0 :(得分:2)

最初我误读了你的问题。你真正想要的是flatMap和内map这样的:

outerSeq.flatMap(o => o.innerSeq.map(i => (o.outerName, i.innerName, i.innerId)))

如果您更喜欢for-comprehension,可能会更容易:

val res = for (o <- outerSeq;
               i <- o.innerSeq)
    yield (o.outerName, i.innerName, i.innerId)