美文网首页
2021-09-09从懒加载说起

2021-09-09从懒加载说起

作者: 菩提树下醉逍遥 | 来源:发表于2021-09-09 17:57 被阅读0次

    使用场景:

    打开数据库连接

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

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

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

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

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

    -----------

    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入门: 类继承单个特质")

    }

    }

    相关文章

      网友评论

          本文标题:2021-09-09从懒加载说起

          本文链接:https://www.haomeiwen.com/subject/bxliwltx.html