如何使用foreach方法来遍历一个集合中的全部元素
函数
方法foreach使用函数做为参数。这个函数的定义应该使用一个集合元素做为输入参数,同时不该该有返回值。而且这个函数的输入参数类型必须是集合中的元素类型。当foreach方法运行的时候,它每次把一个元素从集合中取出做为参数传入到函数中,直到全部的元素都遍历完毕。
scala
下面咱们来看一个例子,一个通用的用来打印集合信息的例子:code
scala> val x = Vector(1,2,3) x: scala.collection.immutable.Vector[Int] = Vector(1, 2, 3) scala> x.foreach((i:Int) => println(i)) 1 2 3
这种一种函数定义的普通写法,但其实Scala能够推断出i的类型为Int,因此没有必要写出i:Intit
scala> x.foreach(i => println(i)) 1 2 3
咱们还有一种更为简洁的写法,这种方式用到了_这种通配符来替代一个临时变量i:io
scala> x.foreach(println _) 1 2 3
在这种状况下,函数字面量包含一个带单个参数的声明,它能够写成更为简洁的形式:table
scala> x.foreach(println) 1 2 3
对于一个像这样简历的例子,最后这样写法是最经常使用的
class
只要你的函数只有一个参数,这个参数的类型是和集合元素类型一致的,而且函数没有任何返回值,那么你就能够调用foreach方法。接下来的例子中,printit方法接受一个char类型的参数,而后对它执行若干操做,同时没有返回值:变量
scala> def printIt(c:Char){println(c)} printIt: (c: Char)Unit scala> "HAL".foreach(printIt) H A L
若是这个函数你只使用一次,那么就没有必要去声明它,直接使用函数字面量就好了foreach
scala> "HAL".foreach((c:Char) => println(c)) H A L
除了能够用于有序集合外,foreach还能够用于Map类,当使用时函数的入参是一个二元祖(key,value):遍历
scala> val m = Map(1->"a",2->"b",3->"c") m: scala.collection.immutable.Map[Int,String] = Map(1 -> a, 2 -> b, 3 -> c) scala> m.foreach(x => println(x._1 + "->" + x._2)) 1->a 2->b 3->c
一般状况下,使用下面的写法更能表达出程序的含义:
movieRatings.foreach { case(movie, rating) => println(s"key: $movie, value: $rating") }