繁体   English   中英

什么是更好的? foreach 并更新 map 与使用 list.map

[英]What is better? foreach and update map vs use list.map

以下哪个更好,为什么?

情况1:

Map[String, String] result = Map.empty[String,String]
inputList.foreach(i => result += (i -> "hi") )

案例二:

inputList.map(i => (i , "hi")).toMap

哪个最好实际上是用例的问题。 如果这是一个管道,我将传递/转换数据并将List[String]转换为Map[String, String]只是其中的一部分,我更愿意将.map.toMap一起使用,因为它使阅读、维护和理解更容易

something.
  .map(someMap)
  .filter(condition)
  .map(i => i -> "hi")
  .toMap
  .mapValues(something)
  ...

但是,如果这用于框架的某些部分,而不是FutureIO使用回调,并且我获得结果的唯一方法是将其附加到某些东西, .foreach将是我会考虑的选项之一

val mutableMap = mutable.Map.empty[String,String]
someSadLibrary.onComplete { result =>
  result.foreach { value =>
    mutableMap += ...
  }
}

如果代码在一个非常热门的路径上,我可能会采用一些不可变的输入,然后使用可变结构来构建结果并最终返回不可变的结果。 这也需要.foreach和突变(我几乎从来没有在我的代码中看到这样做的理由,更像是在库内部)。

长话短说, .map(...).toMap几乎总是更好,但在某些特定情况下,我会考虑突变。

案例二

这是实现它的功能性方式,并且更清楚代码实际在做什么。 如果您担心性能,那么使用view会提供与案例 1 几乎相同的代码,但同样更清晰。

对于 state 来说,显而易见的是,如果情况 2 不可能,则使用情况 1。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM