scala-for的应用:
直接上代码。
def testfor01: Unit ={
val nieces = List("emily", "hananh", "mercedes", "porsche")
/*
关键字yield:for循环中的yield会把当前的元素记录下来,
保存到集合中,循环结束后将返回该集合。
scala中for循环是有返回值的,如果被循环的是Map,则返回的就是Map,
如果被循环的是List,则返回的是List,以此类推
scala遍历集合的方式较多:for循环、foreach循环、while循环、map映射、flatmap等
使用to或until进行for循环时,to与until区别:
to:包含上下限,是闭区间
until:不包含上下限,是开区间
*/
for (n <- nieces) yield println(n.capitalize)
/*
for (n <- nieces)这种for推导式中,失败的匹配则会被安静的忽略
*/
nieces.foreach(nie => println(nieces.mkString))
//2、for循环可作为计时器
println("------for as a timer------")
val a = Array("apple", "banana", "orange")
a.foreach(println)
for (i <- 0 until a.length if i != 1) println(s"$i is ${a(i)}")
//3、卫语句(for循环中if判断),此处to 与until的功能一样
//卫语句通常作为筛选集合,根据具体要求,可使用集合中的filter、take、drop等方法替代for循环
println("------ 在for循环中有if语句嵌套 ------")
for (x <- 0 to 5 if x != 3) println(x)
//在for循环中嵌套if语句,可以同时嵌套多个if语句
for (wei_x <- 0 to 5 if wei_x % 2 == 0 if wei_x == 2) println(wei_x)
System.out.println("------ 遍历Map集合 ------")
//遍历Map集合
val names = Map("fname" -> "Robert", "lname" -> "Goren")
for ((k, v) <- names) println(s"key: $k, value: $v")
}
def testfor02: Unit ={
val nieces = List("emily", "hananh", "mercedes", "porsche")
//for推导:通过for-yield的应用for循环是有返回值的。
val str01: List[String] = for (n <- nieces if !n.contains("emily")) yield n+" ... dd"
str01.foreach(println)
//for推导:在yield中有多行代码时,使用在yield中使用代码块
val str02 = for (n <- nieces if ! n.contains("emily")) yield {
val str = n+" ... dd"
str
}
str02.foreach(println)
}
scala-for应用过程中注意for内的循环是开区间还是闭区间,若使用for-yield守卫,要注意yield的返回对象。