第一章.模式匹配
1.匹配元组
package com.atguigu.chapter08
import com.atguigu.chapter07.$07_Tuple.{Region, School, Student}
object $07_MatchTuple {
def main(args: Array[String]): Unit = {
val t1:(Any,Any,Any) = ("zhangsan",20,"shenzhen")
t1 match{
case (x:String, y:Int, z:Int) =>println(s"1x=${x} y=${y} z=${z}")
case (x,y,z)=>println(s"2x=${x} y=${y} z=${z}")
}
val list3 = List(
new Region("宝安区1",new School("宝安中学1",new Student("张三1",21))),
new Region("宝安区2",new School("宝安中学2",new Student("张三2",22))),
new Region("宝安区3",new School("宝安中学3",new Student("张三3",23))),
new Region("宝安区4",new School("宝安中学4",new Student("张三4",24)))
)
val list4 = for (elem <- list3) yield {
(elem.name, (elem.school.name, (elem.school.student.name, elem.school.student.age)))
}
list4.foreach(x=>{
x match{
case(regionName,(schoolName,(stuName,age)))=> println(stuName)
}
})
}
}
2.匹配对象与样例类
package com.atguigu.chapter08
object MatchClass {
case class Person(val name:String,var age:Int,address:String)
abstract class Sex
case object Man extends Sex
case object Woman extends Sex
def xx(sex:Sex)={
println(sex)
}
def main(args: Array[String]): Unit = {
val person = Person("lisi",20,"shenzhen")
println(person.address)
println(person.name)
println(person.age)
person.age=100
val student = Student("zhangsan",20,"beijing")
println(student.name)
println(student.address)
println(student.age)
xx(Man)
person match {
case Person(x,_,z)=> println(s"name=${x} address=${z}")
}
val stu:Student = new Student("lisi",20,"zz")
stu match{
case Student(x,y,z)=> println(s"${x} ${y} ${z}")
}
}
class Student(val name:String,var age:Int, val address:String)
object Student{
def apply(name:String,age:Int,address:String)=new Student(name,age,address)
def unapply(stu:Student):Option[(String,Int,String)]={
if(stu == null) None
else Some((stu.name,stu.age,stu.address))
}
}
}
3.变量声明与for循环的模式匹配
package com.atguigu.chapter08
object $09_MatchParam {
def main(args: Array[String]): Unit = {
val t =("zhangsan",20,"shenzhen")
println(t._1)
val (name,age,address)=("zhangsan",20,"shenzhen")
println(name)
val List(x,_*)=List(1,2,3,4,45,4)
println(x)
val Array(y,z)=Array("hello",1)
println(y,z)
val map = Map[String,Int]("aa"->1,"bb"->2)
for ((k,v)<- map) {
println(k)
println(v)
}
}
}
4.偏函数
package com.atguigu.chapter08
import com.atguigu.chapter07.$07_Tuple.{Region, School, Student}
import scala.io.StdIn
object $10_PartitalFunction {
def main(args: Array[String]): Unit = {
val func:PartialFunction[String,Int]={
case "hadoop"=>{
println("hadoop..")
10
}
case "spark"=>{
println("spark..")
20
}
case _ =>{
println("其他..")
30
}
}
val wc = StdIn.readLine("请输入一个单词:")
println(func(wc))
val list = List("hello","spark","hadoop","flume")
val func2:PartialFunction[String,Int]={
case x =>x.length
}
println(list.map{
case x => x.length
})
val list3 = List(
("宝安区1",("宝安中学1",("张三1",21))),
("宝安区2",("宝安中学2",("张三2",22))),
("宝安区3",("宝安中学3",("张三3",23))),
("宝安区4",("宝安中学4",("张三4",24)))
)
list3.foreach(x=>x match{
case(regionName,(schoolName,(stuName,age)))=> println(stuName)
})
val func3:PartialFunction[(String,(String,(String,Int))),Unit]={
case(regionName,(schoolName,(stuName,age)))=> println(stuName)
}
list3.foreach{
case(regionName,(schoolName,(stuName,age)))=> println(stuName)
}
}
}
第二章.异常
package com.atguigu.chapter09
import scala.util.Try
object $01_Exception {
def main(args: Array[String]): Unit = {
println(m2(10, 0))
val list= List("1 zhangsan 20 beijing","2 30 shenzhen","3 lisi tianjin")
val list2 = list.map(x=>{
val arr = x.split(" ")
val age = Try(arr(2).toInt).getOrElse(0)
(arr.head,arr(1),age,arr(3))
})
println(list2)
}
def m1(x:Int,y:Int):Int={
if(y==0) throw new Exception("被除数不能为0")
else x/y
}
def m2(x:Int,y:Int):Int={
try{
x/y
}catch{
case e:Exception =>
println(e.getMessage)
-1
}
}
}
第三章.隐式转换
1.隐式转换方法
package com.atguigu.chapter10
import java.io.File
import scala.io.{BufferedSource, Source}
class BB{
implicit def double2Int(d:Double):Int={
println(s"-------->${d}")
d.toInt
}
implicit def file2SourceBuffer(file:File):BufferedSource={
Source.fromFile(file,"utf-8")
}
}
object $01_ImplicitMethod {
def main(args: Array[String]): Unit = {
val bb = new BB
import bb._
import bb.double2Int
val a:Int=2.5
val file = new File("C:\\Users\\admin\\IdeaProjects\\atguigu\\scala-study\\datas\\wc.txt")
file.getLines().foreach(println(_))
}
}
2.隐式参数
package com.atguigu.chapter10
object $02_ImplicitParam {
def main(args: Array[String]): Unit = {
import com.atguigu.chapter10.AA.z1
println(m1(10, 20)(50))
println(m2)
}
def m1(x:Int,y:Int)(implicit z:Int)=x+y+z
def m2(implicit z:Int)=z
}
3.隐式类
package com.atguigu.chapter10
import java.io.File
object $03_ImplicitClass {
implicit class RichFile(file:File){
def m1(x:Int,y:Int)=x+y
val name = "zhansan"
}
def main(args: Array[String]): Unit = {
val file = new File("C:\\Users\\admin\\IdeaProjects\\atguigu\\scala-study\\datas\\wc.txt")
println(file.m1(20, 30))
}
}
第四章.泛型
1.泛型方法
package com.atguigu.chapter11
object $01_GenericMethod {
def main(args: Array[String]): Unit = {
m1[String](Array("aa","bb"))
}
def m1[T](x:Array[T])={
println(x.length)
}
}
2.泛型类
package com.atguigu.chapter11
import java.beans.BeanProperty
object $02_GenericClass {
class Person[T,U](@BeanProperty var name:T, @BeanProperty var age:U)
def main(args: Array[String]): Unit = {
val person = new Person[String,Int]("lisi",20)
println(person.getName)
}
}
3.非变,逆变,协变
package com.atguigu.chapter11
object $03_GenericChange {
class Animal
class Dog extends Animal
class Parent[T]
class Parent2[+T]
class Parent3[-T]
def main(args: Array[String]): Unit = {
var list1 = List[Animal](new Animal,new Animal)
println(list1)
var list2 = List[Dog](new Dog,new Dog)
list1 = list2
println(list1)
var b1 = new Parent[Animal]
var b2 = new Parent[Dog]
var b3 = new Parent2[Animal]
var b4 = new Parent2[Dog]
b3 = b4
println(b3)
var b5 = new Parent3[Animal]
var b6 = new Parent3[Dog]
b6 = b5
println(b6)
}
}
4.上下限
package com.atguigu.chapter11
object $04_GenericLowHight {
class Parent
class Sub1 extends Parent
class Sub2 extends Sub1
class Sub3 extends Sub2
def m1[T<:Sub1](t:T)={
println(t)
}
def m2[T>:Sub1](t:T)={
println(t)
}
def main(args: Array[String]): Unit = {
m1(new Sub3)
m2(new Parent)
val p:Any = new Sub3
m2(p)
val x:Any = 10
m2(x)
}
}
5.上下文
package com.atguigu.chapter11
import java.beans.BeanProperty
object $05_GenericContext {
class Person[T]{
@BeanProperty var name:T=_
}
def main(args: Array[String]): Unit = {
implicit val p:Person[String] = new Person[String]
val person = m1[Int](10)(new Person[Int])
val person2 = m1[String]("zhangsan")
println(person.getName)
println(person2.getName)
val person3 = m2[String]("wangwu")
println(person3.getName)
}
def m1[U](x:U)(implicit p:Person[U])={
p.setName(x)
p
}
def m2[U:Person](x:U)={
val person =implicitly[Person[U]]
person.setName(x)
person
}
}