在scala中从Iterator创建SortedMap

Chi*_*rlo 5 collections scala sortedmap

我有一个val it:Iterator[(A,B)],我想SortedMap[A,B]用我得到的元素创建一个Iterator.我现在这样做的方式是:

val map = SortedMap[A,B]() ++ it
Run Code Online (Sandbox Code Playgroud)

它工作正常,但使用感觉有点尴尬.我检查了SortedMap文档,但找不到更优雅的东西.是否有类似的东西:

 it.toSortedMap 
Run Code Online (Sandbox Code Playgroud)

要么

SortedMap.from(it)
Run Code Online (Sandbox Code Playgroud)

在标准的Scala库中,我可能错过了?

编辑:混合来自@ Rex答案的两个想法我想出了这个:

SortedMap(it.to:_*)
Run Code Online (Sandbox Code Playgroud)

哪个工作正常,并避免必须指定类型签名SortedMap.虽然看起来仍然很有趣,但欢迎进一步的答案.

Rex*_*err 5

您正在寻找的功能确实存在于其他组合中,但不适用于您想要的组合.如果您的集合只需要一个参数,则可以使用.to[NewColl].所以,例如,

import collection.immutable._

Iterator(1,2,3).to[SortedSet]
Run Code Online (Sandbox Code Playgroud)

此外,SortedMap伴侣对象有一个varargs apply,可用于创建有序映射,如下所示:

SortedMap( List((1,"salmon"), (2,"herring")): _* )
Run Code Online (Sandbox Code Playgroud)

(注意: _*这意味着使用内容作为参数).不幸的是,这需要一个Seq而不是一个Iterator.

所以你最好的选择就是你已经这样做了.

  • 注意`SortedMap.from`是[Scala 2.13的API](https://www.scala-lang.org/files/archive/api/current/scala/collection/SortedMap$.html#from[K, V](it:scala.collection.IterableOnce[(K,V)])(implicitevidence$46:Ordering[K]):CC[K,V])。 (2认同)