Создать SortedMap из итератора в Scala
У меня есть val it:Iterator[(A,B)]
и я хочу создать SortedMap[A,B]
с элементами, которые я выхожу из Iterator
, То, как я делаю это сейчас:
val map = SortedMap[A,B]() ++ it
Он отлично работает, но немного неудобно в использовании. Я проверил SortedMap
док, но не смог найти ничего более элегантного. Есть ли что-то вроде:
it.toSortedMap
или же
SortedMap.from(it)
в стандартной библиотеке Scala, может быть, я пропустил?
Редактировать: смешивая обе идеи из ответа @Rex, я придумал это:
SortedMap(it.to:_*)
Который работает просто отлично и избегает необходимости указывать тип подписи SortedMap
, Тем не менее выглядит смешно, поэтому дальнейшие ответы приветствуются.
1 ответ
Функция, которую вы ищете, существует для других комбинаций, но не той, которую вы хотите. Если вашей коллекции требуется только один параметр, вы можете использовать .to[NewColl]
, Так, например,
import collection.immutable._
Iterator(1,2,3).to[SortedSet]
Так же SortedMap
у объекта-компаньона есть приложение varargs, которое можно использовать для создания отсортированных карт следующим образом:
SortedMap( List((1,"salmon"), (2,"herring")): _* )
(Обратите внимание : _*
что означает использование содержимого в качестве аргументов). К сожалению это требует Seq
не Iterator
,
Таким образом, ваш лучший выбор - то, как вы это делаете.