2017-02-17 188 views
0

如何從一個Iterator得到這樣斯卡拉 - 變換迭代到地圖

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但我想只使用Immutable和val變量。

如果我使用for yield語句返回的對象將是一個Iterator[Map],我不希望出現這種情況:

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

你'for'版本很奇。你不需要'if' - 'for'已經處理了這個,你爲每個條目產生一個單獨的'Map',而不僅僅是元組。 '{for(i < - it)yield(i - > i.length)} .toMap'會做到這一點。 –

回答

6

你可以使用地圖:

val m = it.map(c => c -> c.length).toMap