Question

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.

Was it helpful?

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top