Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 952
Chirlo Avatar asked Feb 23 '13 15:02

Chirlo


Video Answer


1 Answers

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.

like image 133
Rex Kerr Avatar answered Sep 29 '22 09:09

Rex Kerr