正在寻找一种从列表中构建scala immutable.TreeMap的方法

时间:2017-09-26 18:17:43

标签: scala treemap

到目前为止,我能想到的唯一方法是使用:

var ans: TreeMap[Int, Int] = immutable.TreeMap(List(1,2,3).map(e => (e, e*2)): _*)

1)有没有办法不使用vararg _ *语法?

2)这种模式在scala中是一种很好的做法吗?

3 个答案:

答案 0 :(得分:2)

  

1)有没有办法不使用vararg _ *语法?

是的,您可以使用breakOut参数map。请注意,这需要对变量

进行显式类型注释
import scala.collection.breakOut
import scala.collection.immutable.TreeMap

val ans: TreeMap[Int, Int] = List(1,2,3).map(e => (e, e*2))(breakOut)
  

2)这种模式在scala中是一种很好的做法吗?

在Scala 2.13中的集合允许您编写list.to(TreeMap)之前,没关系。我的意思是,它不像有更好的选择,所以用什么来解决你的问题。

答案 1 :(得分:1)

  

有没有办法不使用vararg _ *语法?

由于apply上的TreeMap方法采用(A, B)*类型的vararg,我看不到任何其他内置方式

  

这种模式在scala中是一种很好的做法吗?

我不明白为什么不会这样。

另一种方法是以toTreeMap地图的形式提供一种可行的扩展方法。

答案 2 :(得分:1)

1)另一种方法是创建一个空的TreeMap,然后添加所有元素:

immutable.TreeMap.empty[Int, Int] ++ (List(1,2,3).map(e => (e, e*2)))

我对哪种方式更好没有强烈的感受。

2)是的,这很常见。