1. 导包时,多引用的方法,和java中的*类似
例如:
import scala.collection.mutable._
2. 访问元组时,和值一起使用表示第几个元素
例如:
val/var 元组名 = (元素1, 元素2, 元素3....)
//获取第一个元素
元组名._1
//获取第二个元素
元组名._2
3. 在方法转函数时,在方法名后面用<空格>加 ‘_’ 来进行转换
例如:
def method1(x:Int,y:Int):Int = x+y
val f2 = method1<空格>_
4. 根据类型的初始值进行的占位符
例如:
var gender:String = _
5. 使用下划线来简化函数定义
当函数参数,只在函数体中出现一次,而且函数体没有嵌套调用时,可以使用下划线来简化函数定义
例如:
def main(args: Array[String]): Unit = {
val a = List(1,2,3,4,5)
// a.foreach(x=>println(x))
a.foreach(println(_))
}
这里下划线可替代 x=>println(x),
• 如果方法参数是函数,如果出现了下划线,scala编译器会自动将代码封装到一个函数中
• 参数列表也是由scala编译器自动处理
例二:
def main(args: Array[String]): Unit = {
val a = List(1,2,3,4,5)
// println(a.map(x=>x+1))
println(a.map(_ + 1))
}
6. 用于元素匹配
例如:
List(1,2,3,4,5,6,7,8,9).filter(_ % 2 == 0)
匹配每个元素,得出满足条件的列表
7. 用于替换函数的参数
函数参数只在函数中出现一次,可以使用下划线代替
def main(args: Array[String]): Unit = {
val a = List(1,4,2,7,3,5)
val b = (x:Int,y:Int) => if (x<y)true else false
println(a.sortWith(b))
val c = a.sortWith((x:Int,y:Int) => if (x<y)true else false)
println(c)
println(a.sortWith(_ < _))
}
8. 用于模式匹配中默认匹配项
- case表达式中无需使用到匹配到的变量,可以用_替代
格式
变量 match {
case "常量1" => 表达式1
case "常量2" => 表达式2
case "常量3" => 表达式3
case _ => 表达式4 // 默认匹配项
}
str match {
case "hadoop" => println("大数据分布式存储和计算框架")
case "zookeeper" => println("大数据分布式协调服务框架")
case "spark" => println("大数据分布式内存计算框架")
case _ => println("未匹配")
}
- 在case校验的时候, 变量没有被使用, 则可以用_替代
def main(args: Array[String]): Unit = {
val a:Any = 1.0
val result = a match {
case x:String => s"${x}是String类型的数据"
case x:Double => s"${x}是Double类型的数据"
case x:Int => s"${x}是Int类型的数据"
case _ => "未匹配"
}
// 在case校验的时候, 变量没有被使用, 则可以用_替代.
val result2 = a match {
case _:String => "String"
case _:Double => "Double"
case _:Int => "Int"
case _ => "未匹配"
}
println(result)
println(result2)
}