Search code examples
scalacollectionssortedmap

Create SortedMap from Iterator in scala


I have an val it:Iterator[(A,B)] and I want to create a SortedMap[A,B] with the elements I get out of the Iterator. The way I do it now is:

val map = SortedMap[A,B]() ++ it

It works fine but feels a little bit awkward to use. I checked the SortedMap doc but couldn't find anything more elegant. Is there something like:

 it.toSortedMap 

or

SortedMap.from(it)

in the standard Scala library that maybe I've missed?

Edit: mixing both ideas from @Rex's answer I came up with this:

SortedMap(it.to:_*)

Which works just fine and avoids having to specify the type signature of SortedMap. Still looks funny though, so further answers are welcome.


Solution

  • The feature you are looking for does exist for other combinations, but not the one you want. If your collection requires just a single parameter, you can use .to[NewColl]. So, for example,

    import collection.immutable._
    
    Iterator(1,2,3).to[SortedSet]
    

    Also, the SortedMap companion object has a varargs apply that can be used to create sorted maps like so:

    SortedMap( List((1,"salmon"), (2,"herring")): _* )
    

    (note the : _* which means use the contents as the arguments). Unfortunately this requires a Seq, not an Iterator.

    So your best bet is the way you're doing it already.