首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将列表[(字符串,字符串)]转换为Map[String,Map[String,String]]

将列表[(字符串,字符串)]转换为Map[String,Map[String,String]]
EN

Stack Overflow用户
提问于 2015-01-19 08:20:38
回答 1查看 491关注 0票数 0

假设我有下面的列表(字符串,字符串)

代码语言:javascript
复制
List((recap_items[4].invoice_items[0].id,6),
(recap_items[4].invoice_items[1].id,7),
(recap_items[4].invoice_items[1].qty,1),
(recap_items[4].invoice_items[0].qty,1), 
(recap_items[4].invoice_items[1].sur_key,19), 
(recap_items[4].invoice_items[0].sur_key,17))

我如何把这个列表转换成下面的地图呢?

代码语言:javascript
复制
Map(
recap_items[4].invoice_items[0] -> Map(id -> 6, qty -> 1, sur_key -> 17),
recap_items[4].invoice_items[1] -> Map(id -> 7, qty -> 1, sur_key -> 19)
)

或者有什么更好的表现方式来代表这个列表呢?

编辑

代码语言:javascript
复制
case class Recap(recap_id: String, recap_date: Date, submitted_id:String, edited_id: String, recap_items: List[Recap_items])

case class Recap_items(product_name: String, product_id: String, qty: Int, unit_name: String, unit_multiplier: Int, sys_qty: Int, invoice_items: List[Invoice_items])

case class Invoice_items(sur_key: Long, id: Long, qty: Int)

电流逼近

下面是我当前的方法,它给出了Map[String,ListString]:

代码:

代码语言:javascript
复制
flash.data.filterKeys(_.startsWith("recap_items["+i+"].invoice_items")).toList.sortBy(x => x._1).map{
            x => (x._1.split("""\.""").toList(1), x._2)
        }.groupBy(_._1).mapValues{
            x => x.map( v => v._2)
        }

产出:

代码语言:javascript
复制
Map(invoice_items[1] -> List(7, 1, 19), 
invoice_items[0] -> List(6, 1, 17))

知道如何改进这段代码吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-24 22:05:48

不确定为什么要将所有内容转换为字符串(我的意思是recap_items4.invoice_items1,而不是实际的项名)。

如果您的输入是Recap对象,则只需执行以下操作:

代码语言:javascript
复制
val recap: Recap = ...
val map: Map[String, Map[String, String]] =
  (for (
    (recapItem, recapItemIndex) <- recap.recap_items.zipWithIndex;
    (invoiceItem, invoiceItemIndex) <- recapItem.invoice_items.zipWithIndex
  ) yield {
    s"recap_item[$recapItemIndex]invoiceItem[$invoiceItemIndex]" -> Map("id" -> s"$invoiceItem.id", "qty" -> s"$invoiceItem.qty", "sur_key" -> s"$invoiceItem.sur_key")
  }).toMap
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28020409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档