2017-02-17 3 views
0

Как получить из итератора, как этогоScala - Преобразовать итератор в карту

val it = Iterator("one","two","three","four","five")

карту как

Map(four -> 4, three -> 5, two -> 3, five -> 4, one -> 3)

var m = Map[String, Int]() 
     while (it.hasNext) { 
     val cell = it.next() 
     m += (cell -> cell.length()) 
     } 

этого решения с использованием var но Я бы хотел использовать переменную Nonutable и val.

Если я использую for yield заявление возвращения объекта будет Iterator[Map], и я не хочу, чтобы:

val m = for(i<- it if it.hasNext) yield Map(i->i.length()) 
+1

Ваш 'for' версия очень странный. Вам не нужно 'if' -' for' уже обрабатывает это, и вы «даете» отдельную «карту» для каждой записи, а не только кортеж. '{для (i <- it) yield (i -> i.length)}. toMap' сделает это. –

ответ

6

Вы можете просто использовать карту:

val m = it.map(c => c -> c.length).toMap 
Смежные вопросы