2017-02-17 136 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