如何在平面图中制作循环和异常?

Posted

技术标签:

【中文标题】如何在平面图中制作循环和异常?【英文标题】:How to make loop and exception inside flatmap? 【发布时间】:2021-07-28 05:32:03 【问题描述】:

我有一个要求,我必须遍历一个列表并创建Map[String,String]。这里标题的值如下所示:

val headersMap = scala.collection.mutable.Map[String, String]()
try 
  val payloadHeaders = collectorPayload.headers
  for (values <- payloadHeaders.toList) 
    for (value <- values) 
      val header = value.split(":").map(_.trim)
      headersMap += (header(0) -> header(1))
      headersMap += ("Content-Type" -> "application/json; charset=UTF-8")
    
  
 catch 
  case e: Exception => 
    logger.error("Collector Payload extraction error with : " + e.getMessage)
  

有没有更好的方法来处理任何地图或平面地图的方式?

【问题讨论】:

【参考方案1】:

不要使用可变集合或变量(只是假装它们不存在,因为你遇到了一个你肯定不能没有它们的用例......它不会很快) . 通常也要避免使用循环(因为它们有点假设并促进了可变性和副作用),与可变集合相比,您需要它们的频率更低。

   collectorPayload
     .headers
     .iterator
     .flatMap(_.split(":").map(_.trim))
     .map  case Array(a,b) => a -> b 
     .toMap + ("Content-Type" -> "application/json; charset=UTF-8")

【讨论】:

这里最好使用collect,以防 Array 没有两个元素。还是宁愿让它崩溃也不愿默默地丢弃值? 我不知道,OP 周围有一个try/catch,所以,我假设是后者... 感谢您的回答。我有一个问题,您使用的平面图中的值是什么?在循环中它是存储每个元素 我做的和你的循环一样。您可能会发现在 repl 中逐个运行每个语句并准确查看每个步骤发生的转换很有帮助(将 .iterator 替换为 .toList 以获得漂亮的打印结果)。 不,如果没有两个元素,您的代码将抛出两个...或者您的意思是,您的 more 多于两个?这很奇怪,但无论如何。只需将 .map 替换为 .collect 就可以了。

以上是关于如何在平面图中制作循环和异常?的主要内容,如果未能解决你的问题,请参考以下文章

从多类型嵌套列表中制作平面列表[重复]

如何在 Plotly 中制作多面图有自己的 YAxes 刻度标签?

cad 做平面图的技巧

如何从同一平面列表中的另一个项目更改平面列表中项目的状态?

想要制定平面图?Visual Paradigm教你这么做!

如何从平面结构有效地建造树木?