1. 复习老师讲课的内容,复制讲课的代码到工作空间,无法运行。注意:需要修改包名

    匹配match case,样例类case

    object ScalaDemo06 {def main(args: Array[String]): Unit = {
    //    val list = List(1,2,3,4,5,6)val num = 10matchVal(num)val list = List(1,2,3,45,9)list.foreach { matchVal }val ppp1 = new PPP("Angelababy",29)val ppp2 = PPP("Dilireba",26)val ppp3 = PPP("zhangxinyi",22)val ppp4 = PPP("fanbingbing",20)val ppp5 = PPP("liuyan",28)val pppList = List(ppp1,ppp2,ppp3,ppp4,ppp5)pppList.foreach { x => x match {case PPP("zhangxinyi",22) => println("value match" + x.toString())case p:PPP => println("type match" + p.toString()) case _ => println(x.toString())}}}/*** 在scala中 match 既可以进行值匹配  又可以类型匹配* 在scala中 match根据顺序从上往下去匹配,一旦匹配成功就不再继续往下匹配了*/def matchVal(num:Any) = {num match {case 10 => println(10) case 9 => println(9)case i:Int => println("Int:" + i)case _ => println("default")}}
    }/*** 样例类(case classes)* 使用了case关键字的类定义就是样例类(case classes),样例类是种特殊的类* 特点:*         1、样例类默认帮你实现了toString,equals,copy和hashCode、apply等方法*         2、样例类可以new, 也可以不用new*/
    case class PPP(name:String,age:Int) {}

  2. set集合,trait,元组
    object ScalaDemo05 {def main(args: Array[String]): Unit = {//set集合    去重数据val set1 = Set(1, 2, 3, 4, 4)val set2 = Set(1, 2, 5)//遍历 注意:set会自动去重
        set1.foreach { println }for (s <- set1) {println(s)}//交集    .& = intersectval set3 = set1.intersect(set2)set3.foreach { println }val set4 = set1.&(set2)set4.foreach { println }println("*******")//差集  diff = &~
        set1.diff(set2).foreach { println }set1.&~(set2).foreach { println }//子集
        println(set1.subsetOf(set2))//最大值
        println(set1.max)//最小值
        println(set1.min)println("****")//1  2  3  4println(set1.mkString("\t"))//(2,"shsxt")这是一个二元组类型    用一堆小括号组织起来的元素,//Option类型有两个子类型   Some None   如果通过key能够获取到value此时返回的是Some  否则返回的是None//getOrElse如果能获取到值,那么将值返回,否则返回的是默认值  get  getOrElseval map = Map(1 -> "bjsfanbingbingxt", (2, "shsxt"), "5" -> "sasxt")println(map.get("5").getOrElse("no result"))map.foreach((x: (Any, String)) => {println(x._2)})val map1 = Map((1, "a"),(2, "b"),(3, "c"))val map2 = Map((1, "aa"),(2, "bb"),(2, 90),(4, 22),(4, "dd"))map1.++:(map2).foreach(println)println(map.contains(6))println(map.exists(x => x._2.contains("fanbingbing")))/*** 元组* 1.元组定义* 与列表不同的是元组可以包含不同类型的元素。元祖对象是通过一对小括号包裹起来组成的*/val t2 = Tuple2(1, "libingbing")val tt2 = (1, "lichen")val t3 = t2.swapprintln(t3._1 + "===" + t3._2)/*** trait    特性* 1.概念理解* Scala Trait(特征) 相当于 Java 的接口,实际上它比接口还功能强大。* 与接口不同的是,它还可以定义属性和方法的实现。* 一般情况下Scala的类可以继承多个Trait,从结果来看就是实现了多重继承。Trait(特征) 定义的方式与类类似,但它使用的关键字是 trait。* 2.举例:trait中带属性带方法实现* 注意:* 继承的多个trait中如果有同名的方法和属性,必须要在类中使用“override”重新定义。* trait中不可以传参数*/val p = new Person1p.read("Fenger")p.listen("Fenger Love you")val p1 = new Point(2, 2)val p2 = new Point(1, 3)println(p1.isEqule(p2))println(p1.isNotEqule(p2))}
    }trait Read {val readType = "Read"val gender = "m"def read(name: String) {println(name + " is reading")}
    }trait Listen {val listenType = "Listen"val gender = "m"def listen(name: String) {println(name + " is listenning")}
    }class Person1() extends Read with Listen  {override val gender = "f"
    }trait Equle {def isEqule(x: Any): Booleandef isNotEqule(x: Any) = {!isEqule(x)}
    }class Point(x: Int, y: Int) extends Equle {val xx = xval yy = ydef isEqule(p: Any) = {p.isInstanceOf[Point] && p.asInstanceOf[Point].xx == xx}}

  3. 隐式转换系统,隐式值,隐式视图,隐式类(减少代码量)
    /*** Scala的隐式转换系统*     隐式转换,在编写程序的时候可以尽量少的去编写代码,*     让编译器去尝试在编译期间自动推导出这些信息来,*     这种特性可以极大的减少代码量,提高代码质量* 包含:*     隐式值*     隐式视图(隐式方法)*     隐式类*/
    object ScalaDemo07 {def main(args: Array[String]): Unit = {/*** 隐式值* 隐式转换必须满足无歧义规则** 声明隐式参数的类型最好是自定义的数据类型,不要使用Int,String这些常用类型,防止碰巧冲突*/implicit val num1 = 1000//    implicit val num2 = 2000
        add/*** type mismatch; found : String("1000") required: Int* 工作原理:*         在调用sayNum的时候传入的是字符串  与sayNum定义的参数不一致*         此时他会在作用域内寻找隐式视图,发现了stringToInt(参数是string,输出是Int)*         stringToInt("1000") = 1000*         sayNum(1000)*/implicit def stringToInt(numStr: String) = Integer.parseInt(numStr)sayNum("1000")val s1 = new Student1()val s2 = new Student2()implicit def s2Tos1(s: Student2) = new Student1()s2.sayStudent("Anagelababy")/*** 隐式类* 工作原理:*         "abc"这个字符串在调用getLength方法的时候,发现没有这个方法,此时会在作用域内寻找隐式视图或者隐式类*         StringUtil隐式类,构造函数是String类型并且就一个参数,此时会将会创建StringUtil这个类的对象,将"abc"*         传入给StringUtil构造函数====StringUtil类型的对象,getLength方法*/implicit class StringUtil(str: String) {def getLength() = str.length()}println("abc".getLength)}def add(implicit num: Int) = {println(num + 1000)}/*** 隐式视图*     隐式转换为目标类型:把一种类型自动转换到另一种类型*/def sayNum(num: Int) = {println("say num:" + num)}
    }class Student1 {def sayStudent(name: String) = {println(name)}
    }
    class Student2 {}

转载于:https://www.cnblogs.com/yangjiming/p/9619310.html

scala基础-04相关推荐

  1. Scala基础教程--10--数组列表与函数式编程

    Scala基础教程–10–数组列表与函数式编程 章节目标 掌握数组, 元组相关知识点 掌握列表, 集, 映射相关知识点 了解迭代器的用法 掌握函数式编程相关知识点 掌握学生成绩单案例 1. 数组 1. ...

  2. python基础04

    python基础04 python2在编译安装时,可以通过参数 -----enable----unicode=ucs2 或 -----enable--unicode=ucs4 分别用于指定使用2个字节 ...

  3. javaSE基础04

    javaSE基础04 一.三木运算符 <表达式1> ? <表达式2> : <表达式3> "?"运算符的含义是: 先求表达式1的值, 如果为真, ...

  4. Scala基础教程(一):简介、环境安装

    Scala基础语法 如果有很好的了解Java语言,那么将很容易学习Scala. Scala和Java间的最大语法的区别在于;行结束符是可选的.考虑Scala程序它可以被定义为通过调用彼此方法进行通信的 ...

  5. Scala 基础(8)—— 占位符_和部分应用函数

    1. 占位符 _ 针对 Scala 基础(7)-- 函数字面量和一等函数 中最后提到的,关于 filter 函数字面量的精简写法,可以使用占位符 _ 来代替. 占位符_,用来表示一个或者多个参数.(这 ...

  6. Scala学习(一)--Scala基础学习

    Scala基础学习 摘要: 在篇主要内容:如何把Scala当做工业级的便携计算器使用,如何用Scala处理数字以及其他算术操作.在这个过程中,我们将介绍一系列重要的Scala概念和惯用法.同时你还将学 ...

  7. 23篇大数据系列(二)scala基础知识全集(史上最全,建议收藏)

    作者简介: 蓝桥签约作者.大数据&Python领域优质创作者.管理多个大数据技术群,帮助大学生就业和初级程序员解决工作难题. 我的使命与愿景:持续稳定输出,赋能中国技术社区蓬勃发展! 大数据系 ...

  8. 【重难点】【Java基础 04】值传递和引用传递、序列化和反序列化

    [重难点][Java基础 04]值传递和引用传递.序列化和反序列化 文章目录 [重难点][Java基础 04]值传递和引用传递.序列化和反序列化 一.值传递和引用传递 1.对比 二.序列化 1.基本概 ...

  9. Scala基础教程--06--类与对象的详解

    Scala基础教程–06–类与对象的详解 章节目标 掌握类和对象的定义 掌握访问修饰符和构造器的用法 掌握main方法的实现形式 掌握伴生对象的使用 掌握定义工具类的案例 1. 类和对象 Scala是 ...

  10. scala基础(一)

    Scala 编程 -Scala基础 1.课程目标 安装Scala编译和运行环境 熟悉Scala基本语法以及函数式编程 熟练掌握Scala数据结构使用以及集合方法操作 2.Scala基础 2.1Scal ...

最新文章

  1. php重置密码,linux密码忘记重置密码的方法
  2. flutter开发之必须掌握的dart知识点:list,set,map
  3. 学习scorllview
  4. Spring中Bean的概念
  5. 英特尔回应苹果换芯:将继续支持老客户,但我的CPU才是最好的
  6. 圣诞节手绘插画素材,点燃节日温情
  7. VRRP实现AC双机备份原理详解与配置实例
  8. OFFICE技术讲座:WP/SS文字渲染不开启的条件
  9. 《redis设计与实现:第一部分》
  10. Java毕设项目-社区居民健康档案管理系统
  11. VS2010中水晶报表插件下载安装方法 详细出处参考:http://www.jb51.net/softjc/88860.html
  12. KVC基本原理和用法
  13. 上海大学计算机工程与科学学院研究生导师,上海大学计算机工程与科学学院硕士生导师刘方方...
  14. oracle数据库语句
  15. 2022最全大数据学习路线(建议收藏)
  16. 虚拟数字人市场现状研究分析-
  17. 干货 : 聚焦于用户行为分析的数据产品
  18. 拿走不谢!固件逆向分析过程中的工具和技巧(上)
  19. DA-DSUnet: Dual Attention-based Dense SU-net for automatic headand-neck tumor segmentation in MRI im
  20. 软件工程 | 第五章 详细设计与实现

热门文章

  1. 再见2006,奋斗2007
  2. Python中函数的用法
  3. java中连接数据库
  4. linux 进程间通信 --- 消息队列 消息队列标识符 --- 同一类型 --- 消息头 --- 消息体
  5. JSP的Listener介绍
  6. [渝粤教育] 广东-国家-开放大学 21秋期末考试大学英语210262k2
  7. [渝粤教育] 西南科技大学 交通工程学 在线考试复习资料
  8. 【渝粤题库】陕西师范大学201311 刑法学作业
  9. 线性模型第1讲:最小二乘法
  10. 2017北理复试机试题