Scala中的集合對象都有foreach和map兩個方法。兩個方法的***同點在於:都是用於遍歷集合對象,並對每壹項執行指定的方法。而兩者的差異在於:foreach無返回值(準確說返回void),map返回集合對象。見如下代碼及運行結果:b.getClass 得到的是void, 而c.getClass得到的是colletion 。再看代碼的第9-11行,foreach和map的運行結果壹致。結論就是:foreach 無法代替map. 而map方法卻可以代替foreach。
問題:為什麽scala提供foreach和map兩個方法呢?本人看法是scala做為壹種支持函數式編程範式的語言,必然要引入壹種機制以支持數學中函數概念,而在數學中函數就是映射,所以scala中有map方法壹點都不奇怪。而foreach只是用在不需要對集合執行映射操作,但需要遍歷集合時才用到。總而言之,foreach用於遍歷集合,而map用於映射(轉換)集合到另壹個集合。
[java]?view plain?copy
object?arrayTest?extends?App{?
var?increase=(x:Int)=>x+1?
val?someNumbers?=?List?(?-11,?-10,?-?5,?0,?5,?10)?
var?b?=?someNumbers.foreach(increase)?
println(b.getClass)?
var?c?=?someNumbers.map(increase)?
println(c.getClass)?
c.foreach((x:Int)=>print(x+"?"))?
println()?
c.map((x:Int)=>print(x+"?"))?
}?