Scala第三天

1、 可变集合 -- mutable
(1) ListBuffer

(2) HashMap

(3) HashSet

// 1、创建可变的list集合

val listBuffer = new ListBuffer[String]

// 2、 创建可变的Map集合

val hashMap = new mutable.HashMap[String, String]()

// 3、 创建可变的Set集合

val hashSet = new mutable.HashSet[String]()

(4 (1)java 中的模式匹配 :

可以匹配基本数据类型、字符串、枚举

(2)scala 中的模式匹配 :

可以匹配基本数据类型、字符串、枚举、对象、匹配类型

匹配成功后可以有返回值

(3)格式 :

val i = 100

i match {

//匹配项,只有一个可以匹配成功

case 100 => println("i等于100")

case 200 => println("i等于200")

case _ => println("其它")

}

(4) 应用 : 主要用于高阶函数、匿名函数

1、匹配数组

// 没有使用的列可以使用下划线占位

case Array(id: String, _: String, sco: String) =>

(id, sco.toInt)

2、匹配类型

// 匹配类型 -- 字段的顺序和类型要一致

case (id: String, name: String, age: Int) =>

(id, name, age + 1)

(5) 以后代码尽量使用case,这样使得代码可读性变高

// 3、 按学号分组

val groupSco: Map[String, List[(String, String, Int)]] = kvScore.groupBy {

case (id: String, _: String, _: Int) => id

}

3、 隐式转换 -- implicit 关键字

作用 : 简化代码

(1) 隐式转换方法 :

可以将当前作用域中所有的参数类型的变量转换成返回值类型

隐式转换方法和方法名无关, 和参数类型、返回值类型有关

在同一个作用域中只能存在一个参数类型和返回值类型一样的隐式转换方法

隐式转换的作用 -- 可以动态的给对象增加新的方法

scala中的String 和java中的String是同一个。

为什么scala中的String有toInt ,toDouble?

--因为scala会隐式的将String转换成StringLike

格式:

// 将所有 int类型的变量转换成 String类型

implicit def intToString(i: Int): String = {

println("intToString")

i.toString

}

// 这个100既是Int类型, 也是转换成的String类型

100.split(",")

(2) 隐式转换类 :

可以将构造函数参数类型转换成当前类的类型 -- 构造函数参数类型就会多了当前类的方法

隐式转换类和类名无关,和构造函数的参数类型、隐式转换的方法名有关

格式:

// 参数类型String转换成了Read类的类型, 所以String类型的就有了load方法

implicit class Read(path: String) {

def load: List[String] = {

println("读取数据的方法")

Source.fromFile(path).getLines().toList

}

}

4、(1) 偏应用函数 :

并不是一个函数叫偏应用函数,而是一种应用叫偏应用函数

调用函数时可以不用把参数全传完

val f1: Int => Int = fun(100, _: Int)

(2) 函数柯里化 :

调用函数时可以不用把参数全传完

def fun1(x: Int)(y: Int) = x * y

(3) 函数柯里化一般与隐式转换变量一起使用 :

implicit val num: Int = 100

def fun2(x: Int)(implicit y: Int): Int = x * y

println(fun2(2)) // 2*100 = 200

5、 反射

可以通过类对象获取类的方法、构造函数、属性

可以通过获取到的构造函数创建这个类的对象

类对象 : 一个class文件在内存中的存在形式, 本质是Class这个类的对象(所有的类都是Class类的对象)

类的对象 : 通过new创建的类的对象

相关推荐
Ajiang28247353042 小时前
对于C++中stack和queue的认识以及priority_queue的模拟实现
开发语言·c++
幽兰的天空2 小时前
Python 中的模式匹配:深入了解 match 语句
开发语言·python
Theodore_10225 小时前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
----云烟----7 小时前
QT中QString类的各种使用
开发语言·qt
lsx2024067 小时前
SQL SELECT 语句:基础与进阶应用
开发语言
开心工作室_kaic7 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
向宇it7 小时前
【unity小技巧】unity 什么是反射?反射的作用?反射的使用场景?反射的缺点?常用的反射操作?反射常见示例
开发语言·游戏·unity·c#·游戏引擎
武子康7 小时前
Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据仓库·sql·mybatis·springboot·springcloud
qq_17448285758 小时前
springboot基于微信小程序的旧衣回收系统的设计与实现
spring boot·后端·微信小程序
转世成为计算机大神8 小时前
易考八股文之Java中的设计模式?
java·开发语言·设计模式