2021-09-09从懒加载说起

使用场景:

打开数据库连接

由于表达式执行代价昂贵, 因此我们希望能推迟该操作, 直到我们确实需要表达式结果值时才执行它

提升某些特定模块的启动时间.

为了缩短模块的启动时间, 可以将当前不需要的某些工作推迟执行

确保对象中的某些字段能优先初始化

为了确保对象中的某些字段能优先初始化, 我们需要对其他字段进行惰性化处理


-----------

package dheima.p1

/**

* ClassName: ${ClassName}

* Package: ${Package}

* Description:

*

* @Author: ZhangQiang1

* @Date: 2021/9/9 9:10

* @Version: 1.0

*/

object Biyan3StudentGrade {

def main(args: Array[String]):Unit = {

//    1. 定义列表, 记录学生的成绩, 格式为: 姓名, 语文成绩, 数学成绩, 英语成绩, 学生信息如下: ("张三",37,90,100),

    //("李四",90,73,81), ("王五",60,90,76), ("赵六",59,21,72), ("田七",100,100,100)

    val stuList=List(("张三",37,90,100),("李四",90,73,81),("王五",60,90,76),("赵六",59,21,72),("田七",100,100,100))

//2. 获取所有语文成绩在60分(含)及以上的同学信息.

    val chineseList=stuList.filter(_._2>=60)

//    println(s"语文成绩及格的学生信息: ${chineseList}")

    //3. 获取所有学生的总成绩. //用的元组

    val countList=stuList.map(x=> x._1->(x._2+x._3+x._4))

//    println(countList)

    //4. 按照总成绩降序排列. //一般是升序  站在列表上来看

//    val rankList=countList.sortBy(_._2).reverse

    val sortList2=countList.sortWith((x,y) => x._2 > y._2)

//    println(rankList)

//    println(sortList2)

    //5. 打印结果.

    println(s"语文成绩合格的学生信息:${chineseList}")

println(s"所有学生及其总成绩:${countList}")

println(s"总成绩降序排列:${sortList2}")

}

}



语文成绩合格的学生信息:List((李四,90,73,81), (王五,60,90,76), (田七,100,100,100))

所有学生及其总成绩:List((张三,227), (李四,244), (王五,226), (赵六,152), (田七,300))

总成绩降序排列:List((田七,300), (李四,244), (张三,227), (王五,226), (赵六,152))



刺激:

玩了一个简写形式的

package dheima.p1

import scala.io.StdIn

/**

* ClassName: ${ClassName}

* Package: ${Package}

* Description:

*

* @Author: ZhangQiang1

* @Date: 2021/9/9 9:59

* @Version: 1.0

*/

object biYan4pipei {

def main(args: Array[String]):Unit = {

println("请您输入单词:")

val word=StdIn.readLine()

wordmatch {

case "hadoop" =>println("大数据分布式存储和计算框架")

case "zookeeper" =>println("大数据分布式协调服务框架")

case "spark" =>println("大数据分布式内存计算框架")

case _ =>println("未匹配")

}

}

}


需求 1. 提示用户录入一个单词并接收.

2. 判断该单词是否能够匹配以下单词,如果能匹配,返回一句话

3. 3. 打印结果.

单词 返回

hadoop 大数据分布式存储和计算框架

zookeeper 大数据分布式协调服务框架

spark 大数据分布式内存计算框架

未匹配 未匹配


package dheima.p1

/**

* ClassName: ${ClassName}

* Package: ${Package}

* Description:

*

* @Author: ZhangQiang1

* @Date: 2021/9/9 10:09

* @Version: 1.0

*/

object biyan5leixingPipei {

def main(args: Array[String]):Unit = {

//    var word:Any="hadoop"

    var word:Any=1.0

    wordmatch {

case word1:String =>println("String类型")

case word1:Int =>println("Int型")

case word1:Double =>println("Double型")

case _ =>println("未匹配")

}

}

}



测了个寂寞:

你怎么这么好看

package dheima.p1

/**

* ClassName: ${ClassName}

* Package: ${Package}

* Description:

*

* @Author: ZhangQiang1

* @Date: 2021/9/9 10:09

* @Version: 1.0

*/

object biyan5leixingPipei {

def main(args: Array[String]):Unit = {

//1. 定义一个变量为Any类型,然后分别给其赋值为"hadoop"、1、1.0

    val a:Any =1

    //2. 定义模式匹配,然后分别打印类型的名称

    val result = amatch {

case x:String =>s"${x}是String类型的数据"

      case x:Double =>s"${x}是Double类型的数据"

      case x:Int =>s"${x}是Int类型的数据"

      case _ =>"未匹配"

    }

//3. 打印结果

    println(result)

}

}



【需求:

需求 1. 从控制台读入一个数字a(使用StdIn.readInt)

如果 a >= 0 而且 a <= 3,打印[0-3]

如果 a >= 4 而且 a <= 8,打印[4,8]

否则,打印未匹配



代码:

package dheima.p1

import scala.io.StdIn

/**

* ClassName: ${ClassName}

* Package: ${Package}

* Description:

*

* @Author: ZhangQiang1

* @Date: 2021/9/9 10:46

* @Version: 1.0

*/

object biyan6ShouWei {

def main(args: Array[String]):Unit = {

//需求 1. 从控制台读入一个数字a(使用StdIn.readInt)

  println("请输入数据:")

val num=StdIn.readInt()

//2. 如果 a >= 0 而且 a <= 3,打印[0-3]

    nummatch {

case aif(a >=0 &&a <=3)=>println("[0-3]")

case aif(a >=4 &&a <=8)=>println("[4,8]")

case _ =>println("未匹配")

}

//3. 如果 a >= 4 而且 a <= 8,打印[4,8]

    //  4. 否则,打印未匹配

  }

}



打了个寂寞:

package dheima.p1

/**

* ClassName: ${ClassName}

* Package: ${Package}

* Description:

*

* @Author: ZhangQiang1

* @Date: 2021/9/9 10:54

* @Version: 1.0

*/

object biyan7yangLiLei {

def main(args: Array[String]):Unit = {

//需求

    //1. 创建两个样例类Customer(包含姓名, 年龄字段), Order(包含id字段)

    val customer1:Any=new Customer("alice",18)

val order1:Any=new Order("a345ce")

//2. 分别定义两个样例类的对象,并指定为Any类型

    //3. 使用模式匹配这两个对象,并分别打印它们的成员变量值

    /*val result= customer1 match {

      case Customer(name,age) => s"姓名:${name},年龄:${age}"

case Order(id:String) =>s"id: ${id}"

      case _ => "未匹配"

}

println(result)*/

    val result2= order1match {

case Customer(name,age) =>s"姓名:${name},年龄:${age}"

      case Order(id:String) =>s"id: ${id}"

      case _ =>"未匹配"

    }

println(result2)

}

case  class  Customer(var name:String,var age:Int)

case  class  Order(var id:String)

}


需求 将的好


\1. 依次修改代码定义以下三个数组

Array(1,x,y) // 以1开头,后续的两个元素不固定

Array(0) // 只匹配一个0元素的元素

Array(0, ...) // 可以任意数量,但是以0开头

--------

package dheima.p1

/**

* ClassName: ${ClassName}

* Package: ${Package}

* Description:

*

* @Author: ZhangQiang1

* @Date: 2021/9/9 11:13

* @Version: 1.0

*/

object biyan8PipeiSHuzu {

def main(args: Array[String]):Unit = {

//    \1. 依次修改代码定义以下三个数组

      val arr1:Array[Any]=Array(1,2,"yhiuy")

val arr2:Array[Any]=Array(0)

val arr3:Array[Any]=Array(0,5,8,6)

arr1match {

case Array(1,x,y) =>println(s"元素长度为3,以1开头,后面两个元素为:${x}和${y}")

case Array(0)  =>println("匹配:只有一个0元素的数组")

case Array(1,_*) =>println("匹配:起始为1,后面还有无数个元素的数组")

case _ =>println("未匹配")

}

//    Array(1,x,y) // 以1开头,后续的两个元素不固定

//    Array(0) // 只匹配一个0元素的元素

//

//    Array(0, ...) // 可以任意数量,但是以0开头

  }

}


结果:元素长度为3,以1开头,后面两个元素为:2和yhiuy


---



需求:
.5.2 示例二: 匹配列表 需求 1. 依次修改代码定义以下三个列表

List(0) // 只保存0一个元素的列表

List(0,...) // 以0开头的列表,数量不固定

List(x,y) // 只包含两个元素的列表



package dheima.p1

/**

* ClassName: ${ClassName}

* Package: ${Package}

* Description:

*

* @Author: ZhangQiang1

* @Date: 2021/9/9 11:13

* @Version: 1.0

*/

object biyan8PipeiSHuzu {

def main(args: Array[String]):Unit = {

//    \1. 依次修改代码定义以下三个列表

      val list1=List(1,2)

val list2=List(0)

val list3=List(0,5,8,6)

list1match {

case List(x,y) =>println(s"只包含两个元素的列表,两个元素为:${x}和${y}")

case List(0)  =>println("匹配:只有一个0元素的列表")

case List(0,_*) =>println("匹配:起始为0,后面还有无数个元素的列表")

case _ =>println("未匹配")

}

}

}



//思路二: 采用关键字优化 Nil, tail

package dheima.p1

/**

* ClassName: ${ClassName}

* Package: ${Package}

* Description:

*

* @Author: ZhangQiang1

* @Date: 2021/9/9 11:13

* @Version: 1.0

*/

object biyan8PipeiSHuzu {

def main(args: Array[String]):Unit = {

//    \1. 依次修改代码定义以下三个列表

      val list1=List(1,2)

val list2=List(0)

val list3=List(0,5,8,6)

list3match {

case x::y::Nil =>println(s"只包含两个元素的列表,两个元素为:${x}和${y}")

case 0::Nil  =>println("匹配:只有一个0元素的列表")

case 0::tail  =>println("匹配:起始为0,后面还有无数个元素的列表")

case _ =>println("未匹配")

}

}

}


1.5.3 案例三: 匹配元组

需求

package dheima.p1

/**

* ClassName: ${ClassName}

* Package: ${Package}

* Description:

*

* @Author: ZhangQiang1

* @Date: 2021/9/9 11:13

* @Version: 1.0

*/

object biyan8PipeiSHuzu {

def main(args: Array[String]):Unit = {

//    \1. 依次修改代码定义以下三个列表

      val list1=(1,2,3)

val list3=(6,0,5)

list1match {

case (1,x,y) =>println(s"以1开头的、一共三个元素的元组 ,后两个元素为:${x}和${y}")

case (x,y,5)  =>println("匹配: 一共有三个元素,最后一个元素为5的元组")

//      case 0::tail  => println("匹配:起始为0,后面还有无数个元素的列表")

      case _ =>println("未匹配")

}

}

}


需求 1. 生成包含0-10数字的数组,使用模式匹配分别获取第二个、第三个、第四个元素
2. 生成包含0-10数字的列表,使用模式匹配分别获取第一个、第二个元素

打一波;

(1,2,3)

---------------

[object biyan9bianliang {

def main(args: Array[String]):Unit = {

//1. 生成包含0-10数字的数组,使用模式匹配分别获取第二个、第三个、第四个元素

    //1.1 生成包含0-10数字的数组

    val arr = (0 to10).toArray

//1.2 使用模式匹配分别获取第二个、第三个、第四个元素

    val Array(_, x, y, z, _*) = arr;

    //1.3 打印结果.

    println(x, y, z)

println("-" *15)

}

----------



package dheima.p1

/**

* ClassName: ${ClassName}

* Package: ${Package}

* Description:

*

* @Author: ZhangQiang1

* @Date: 2021/9/9 11:41

* @Version: 1.0

*/

object biyan9bianliang {

def main(args: Array[String]):Unit = {

//1. 生成包含0-10数字的数组,使用模式匹配分别获取第二个、第三个、第四个元素

      //1.1 生成包含0-10数字的数组

      val list = (0 to10).toList

//1.2 使用模式匹配分别获取第二个、第三个、第四个元素

      val List( x, y, _*) = list

//思路二: ::, tail 实现.

      val c :: d ::tail = list

//1.3 打印结果.

      println(x, y)

println(c,d)

println("-" *15)

}

}



讲得好

1.7 匹配for表达式 Scala中还可以使用模式匹配来匹配for表达式,从而实现快速获取指定数据, 让我们的代码看起来更简洁, 更优雅. 需求

定义变量记录学生的姓名和年龄, 例如: "张三" -> 23, "李四" -> 24, "王五" -> 23, "赵六" -> 26

2. 获取所有年龄为23的学生信息, 并打印结果.



张三=23

王五=23

---------------

张三=23

王五=23



daima代码:

package dheima.p1

/**

* ClassName: ${ClassName}

* Package: ${Package}

* Description:

*

* @Author: ZhangQiang1

* @Date: 2021/9/9 11:41

* @Version: 1.0

*/

object biyan9bianliang {

def main(args: Array[String]):Unit = {

//      讲得好

//

//      1.7 匹配for表达式 Scala中还可以使用模式匹配来匹配for表达式,从而实现快速获取指定数据, 让我们的代码看起来更简洁, 更优雅. 需求

//

//      1. 定义变量记录学生的姓名和年龄, 例如: "张三" -> 23, "李四" -> 24, "王五" -> 23, "赵六" -> 26

//      2.  2. 获取所有年龄为23的学生信息, 并打印结果.

      var word=Map("张三" ->23, "李四" ->24, "王五" ->23, "赵六" ->26)

for((k,v) <- wordif v==23)println(s"${k}=${v}")

println("-"*15)

//2.2 格式二: 通过固定值实现.

      for ((k,23) <- word)println(s"${k}=23")

}

}



package dheima.p1

/**

* ClassName: ${ClassName}

* Package: ${Package}

* Description:

*

* @Author: ZhangQiang1

* @Date: 2021/9/9 14:19

* @Version: 1.0

*/

object biyan10chuling {

def main(args: Array[String]):Unit = {

//    1. 定义一个两个数相除的方法,使用Option类型来封装结果

    //2. 打印结果

    //不是除零,打印结果

    //除零, 则打印异常错误

    val result=div(10,1)

//思路一.通过模式匹配来打印结果

    resultmatch {

////不是除零,打印结果

      case Some(x) =>println(x)

//    //除零, 则打印异常错误

      case None =>println("除数不能为0")

}

println("-"*15)

//思路二: 采用getOrElse()方法实现.

    println(result.getOrElse(0))

}

def div(a:Int,b:Int)={

if (b==0){

None//除数为0,没有结果

    }else {

Some(a/b)//除数不为0.返回具体的结果

    }

}

}




02



package dheima.p1

/**

* ClassName: ${ClassName}

* Package: ${Package}

* Description:

*

* @Author: ZhangQiang1

* @Date: 2021/9/9 14:19

* @Version: 1.0

*/

object biyan10chuling {

def main(args: Array[String]):Unit = {

//

  val word:PartialFunction[Int,String] ={

case 1 =>"一"

    case 2 =>"二"

    case 3 =>"三"

    case  _ =>"其他"

  }

println(word(1))

println(word(2))

println(word(3))

println(word(4))

}

}



需求

1. 定义一个列表,包含1-10的数字

2. 请将1-3的数字都转换为[1-3]

3. 请将4-8的数字都转换为[4-8]

4. 将其他的数字转换为(8-*]

5. 打印结果.



简单解法;

val pf:PartialFunction[Int,String]={

case xif(x<4) =>"[1-3]"

  case xif(x<9&&x>=4) =>"[4-8]"

  case _  =>"(8-*]"

}

println(pf(5))



youd有点狂躁

package dheima.p2

/**

* ClassName: ${ClassName}

* Package: ${Package}

* Description:

*

* @Author: ZhangQiang1

* @Date: 2021/9/9 16:01

* @Version: 1.0

*/

object biyan1DefineGju {

class Person{

var name =""

    var age =0

  }

//1. 在main方法中创建Person类对象,设置成员变量为"张三"、23

def main(args: Array[String]):Unit = {

val p=new Person

p.name="张三"

  p.age=23

  //2. 打印对象的名字和年龄

  println(p.name,p.age)

}

}



这种风格更搭配;

package dheima.p2

/**

* ClassName: ${ClassName}

* Package: ${Package}

* Description:

*

* @Author: ZhangQiang1

* @Date: 2021/9/9 16:01

* @Version: 1.0

*/

object biyan1DefineGju {

class Person{

var name:String =_

var age:Int =_

}

//1. 在main方法中创建Person类对象,设置成员变量为"张三"、23

def main(args: Array[String]):Unit = {

val p=new Person

p.name="张三"

  p.age=23

  //2. 打印对象的名字和年龄

  println(p.name,p.age)

}

}



讲得好

package dheima.p2

/**

* ClassName: ${ClassName}

* Package: ${Package}

* Description:

*

* @Author: ZhangQiang1

* @Date: 2021/9/9 16:01

* @Version: 1.0

*/

object biyan1DefineGju {

class Customer{

var name:String=_

var sex:String=_

def printHello(msg:String){println(msg+",hello")}

}

//1. 在main方法中创建Person类对象,设置成员变量为"张三"、23

def main(args: Array[String]):Unit = {

val p=new Customer

p.name="zhangf"

  p.sex="男"

  println(p.name,p.sex)

p.printHello("chongchong")

}

}



(zhangf,男)

chongchong,hello



张宇 


01



[


08



需求

编写一个DateUtils工具类专门用来格式化日期时间

定义一个方法,用于将日期(Date)转换为年月日字符串,例如:2030-10-05

定义一个方法,  用于将年月日字符串转换为日期(Date).

步骤

定义一个DateUtils单例对象

在DateUtils中定义日期格式化方法(date2String)和解析字符串方法(string2Date)

使用SimpleDateFormat来实现String和Date之间的相互转换




//案例: 定义DateUtils工具类, 用于实现String和Date之间的相互转换.

object ClassDemo15 {

  //1. 定义DateUtils工具类.    //也就是Scala中的单例对象.

  object DateUtils {

    //2. 创建SimpleDateFormat类型的对象, 用来进行转换操作.

    var sdf: SimpleDateFormat = null

    //3. 定义方法date2String, 用来将Date日期对象转换成String类型的日期.

    //参数1: 日期对象,  参数2: 模板

    def date2String(date: Date, template: String):String  = {

      sdf = new SimpleDateFormat(template)

      sdf.format(date)

    }

    //4. 定义方法string2Date, 用于将String类型的日期转换成Date日期对象.

    def string2Date(dateString: String, template: String) = {

      sdf = new SimpleDateFormat(template)

      sdf.parse(dateString)

    }

  }

  //定义main方法, 作为程序的主入口.

  def main(args: Array[String]): Unit = {

    //5. 调用DateUtils#date2String()方法, 用来格式化日期.

    val s = DateUtils.date2String(new Date(), "yyyy-MM-dd")

    println("格式化日期: " + s)

    //6. 调用DateUtils#string2Date()方法, 用来解析日期字符串.

    val d = DateUtils.string2Date("1314年5月21日", "yyyy年MM月dd日")

    println("解析字符串: " + d)

  }

}



zui最简版

1. 定义抽象动物类(Animal), 属性: 姓名, 年龄, 行为: 跑步, 吃饭.

2. 定义猫类(Cat)继承自动物类, 重写吃饭的方法, 并定义该类独有的抓老鼠的方法.

3. 定义狗类(Dog)继承自动物类, 重写吃饭的方法, 并定义该类独有的看家的方法.



package dheima.p2

/**

* ClassName: ${ClassName}

* Package: ${Package}

* Description:

*

* @Author: ZhangQiang1

* @Date: 2021/9/9 17:19

* @Version: 1.0

*/

object biyan2dongwulei {

class Animal{

var name=""

    var age=0

    def eat(){}

def run()=println("动物会跑步!...")

}

class Catextends Animal{

override def eat():Unit = {

println("猫吃鱼")

}

def CatchMouse():Unit ={

println("猫抓老鼠")

}

}

def main(args: Array[String]):Unit = {

val p  =new Cat

p.name="Alice"

    p.age=18

    p.eat()

p.CatchMouse()

}

}



最简单的 继承trait

package dheima.p2

/**

* ClassName: ${ClassName}

* Package: ${Package}

* Description:

*

* @Author: ZhangQiang1

* @Date: 2021/9/9 17:48

* @Version: 1.0

*/

object biyan3traitTest {

//1. 定义一个特质

  trait Logger{

def log(msg:String)

}

//2. 定义一个类, 继承特质.

  class Conggerextends Logger{

override def log(msg:String):Unit =println(msg)

}

def main(args: Array[String]):Unit = {

val c1=new Congger

c1.log("trait入门: 类继承单个特质")

}

}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,546评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,224评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,911评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,737评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,753评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,598评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,338评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,249评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,696评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,888评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,013评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,731评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,348评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,929评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,048评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,203评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,960评论 2 355

推荐阅读更多精彩内容