Case Class
/**
*
* case class 样例类 必须要有参数列表
* case object 样例对象 必须不能加参数列表
*
* interview: class 和 case class的区别
*
* case class 重写了toString, equals hashCode
* case class 默认就实现了序列化
* case class 不用new
*/
object CaseClassApp {
def main(args: Array[String]): Unit = {
println(Dog("旺财").name)
}
}
case class Dog(name:String)
测试上面的结论:
class :
scala> class person(val name :String , val age : Int)
defined class person
scala> val p1 = new person("sx",24)
p1: person = person@38f796a5
scala> val p2 = new person("sx",24)
p2: person = person@1d04ef4f
scala> p1 ==p2
res37: Boolean = false
case class :
scala> case class Person(name : String ,age : Int)
defined class Person
scala> val p3 = Person("sx",30)
p3: Person = Person(sx,30)
scala> val p4 = Person("sx",30)
p4: Person = Person(sx,30)
scala> p3 ==p4
res38: Boolean = true
这里为什么 case class 的就相等呢?
case class 重写了toString, equals hashCode
模式匹配
**
*
* 模式匹配
* 身高
* 腿
* 脸
* 胸
*
* 变量 match {
* case 颜值 => code
* case 腿 => code
* case 身高 => code
* case 脸 => code
* case _ => 凤姐 芙蓉姐姐
* }
*
* 匹配内容、匹配类型、匹配集合、匹配case
*/
object MatchApp {
def main(args: Array[String]): Unit = {
/**
* 匹配内容
*/
val teachers = Array("Aoi Sola", "YuiHatano", "Akiho Yoshizawa")
val name = teachers(Random.nextInt(teachers.length))
name match {
case "YuiHatano" => println("波老师")
case "Akiho Yoshizawa" => println("吉老师")
case _ => println("真不知道这位老师是谁")
}
// println(name)
/**
* 类型匹配
*/
def matchType(obj:Any) = obj match {
case x:Int => println("Int")
case s:String => println("String")
case m:Map[_,_] => println("Map")
case _ => println("Other Type...")
}
// matchType(1)
// matchType("若泽")
// matchType(Map("ruoze"->30))
// matchType(10L)
/**
* 匹配集合
*/
def matchList(list:List[String]): Unit = {
list match {
case "ruoze"::Nil => println("Hello: ruoze") // 只能匹配只有若泽一个元素
case x::y::Nil => println(s"Hi: $x , $y") // 能匹配集合中有两个元素的
case "jepson"::tail => println("HI:jepson and others") // 匹配jepson开头的
case _ => println("......")
}
}
// matchList(List("ruoze"))
// matchList(List("苍老师","泷老师"))
// matchList(List("jepson","苍老师","泷老师","波老师"))
// matchList(List("苍老师","泷老师","波老师","jepson"))
/**
* case class匹配
*/
val caseclasses = Array(CheckTimeOutTask,HeartBeat(3000),SubmitTask("100","task100"))
caseclasses(Random.nextInt(caseclasses.length)) match {
case CheckTimeOutTask => println("CheckTimeOutTask")
case HeartBeat(time) => println("HeartBeat")
case SubmitTask(id,name) => println("SubmitTask")
}
//涉及到流的方式
val file = "xx.txt"
try{
//TODO... 业务逻辑处理
// open file
1/0
} catch {
case e:ArithmeticException => println("除数不能为0...")
case e:Exception => e.printStackTrace()
} finally {
// 资源释放的
// close
println("一定会执行....")
}
}
}
case class SubmitTask(id:String,name:String)
case class HeartBeat(time:Long)
case object CheckTimeOutTask
柯里化与偏函数
object OtherFunctionApp {
def main(args: Array[String]): Unit = {
// currying
def sum(a:Int,b:Int) = a + b
//println(sum(3,5))
// Spark源码 Spark SQL UDF
def sum2(a:Int)(b:Int) = a + b
//println(sum2(4)(6))
/**
* 偏函数 PartialFunction
* A: 输入参数类型
* B:输出参数类型
*
* 包在花括号内没有match的一组case语句
*/
val teachers = Array("Aoi Sola", "YuiHatano", "Akiho Yoshizawa")
val name = teachers(Random.nextInt(teachers.length))
def say:PartialFunction[String,String] = {
case "YuiHatano" => "波老师"
case "Akiho Yoshizawa" => "吉老师"
case _ => "真不知道这位老师是谁"
}
println(say(name))
}
}
文件操作
object FileApp {
def main(args: Array[String]): Unit = {
val content = Source.fromFile("E:\\ruozedata_workspace\\ruozedata-spark\\data\\file.txt")
// println(content)
def read(): Unit ={
for(line <- content.getLines()){ //
println(line)
}
}
read()
}
}