哪个更好? foreach和更新地图与使用list.map

问题描述 投票:0回答:1

以下哪个更好,为什么?

案例1:

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

案例2:

inputList.map(i => (i , "hi")).toMap
scala generics
1个回答
0
投票

哪个最好,实际上是一个用例问题。如果这是我要传递/转换数据并且将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总是会[[几乎更好,但是在某些特定情况中,我不会考虑选择变异。

© www.soinside.com 2019 - 2024. All rights reserved.