对象(id,List)到多个List(对象(id,字段)

时间:2017-05-15 19:33:28

标签: scala

我有一个案例类

case class Router(routerId: String, modelInfo: List[Map[String,String]])

我想将其转换为Tuple3(routerId,pinModel,color)

modelInfo = List [Map [pinModel,color]]

例如,如果我有一个Router对象:

val router = Router("123", List(Map("pinModel1"-> "Red", "pinModel2"-> "Black", "pinModel3"-> "Yellow")))

我希望输出为:

val routers = List(("123","pinModel1","Red"),("123","pinModel2","Black"),("123","pinModel3","Yellow"))

我可以实现它的一种方法是获取Router.modelInfo列表并创建那么多的Router实例。但是,我认为必须有一个更清洁的解决方案。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

也许:

val routers = 
  router.modelInfo.flatMap(_.map { case (key, value) => (router.routerId, key, value)})

哪个收益率:

(123,pinModel1,Red)
(123,pinModel2,Black)
(123,pinModel3,Yellow)

答案 1 :(得分:1)

for {
    m <- router.modelInfo
    (k, v) <- m
} yield (router.routerId, k, v)

(这与刚出现的Yuval解决方案完全相同。)