1. package com.yz8
  2.  
  3. import org.junit.Test
  4.  
  5. class test {
  6. @Test
  7. def test: Unit = {
  8.  
  9. val ints = List(1,5,7,6,8)
  10. println(ints.head)//1
  11. println(ints.tail)//List(5, 7, 6, 8)
  12.  
  13. //判断集合是否为空
  14. println(ints.isEmpty)
  15. println(ints==Nil)
  16. }
  17.  
  18. @Test
  19. def test2(): Unit ={
  20. val ints = List(1,5,7,6,8)
  21. def sum(list:List[Int]): Int ={
  22. if(list==Nil){
  23. return 0
  24. }
  25. list.head+sum(list.tail)
  26. }
  27. val i = sum(ints)
  28. println(i)//27
  29. //一般不用return返回值 一般当作break来用
  30.  
  31. }
  32.  
  33. @Test
  34. def test3():Unit={
  35. //会产生一个新的集合,不是对原有集合的更改
  36.  
  37. //集合的首尾添加
  38. val a=List(1,2,3)
  39. val b=List(5,6,7)
  40.  
  41. //尾添加
  42. val c=a.++(b)//1
  43. println(c)
  44.  
  45. //首添加 (除了点以外三个符号)
  46. val d=a.++:(b)
  47. println(d)
  48. val e=a.:::(b)
  49. println(e)
  50.  
  51. //尾部添加元组
  52. val f=a.:+(7,8,9)//2
  53. println(f)//List(1, 2, 3, (7,8,9))
  54.  
  55. //首部加元组 (除了点以外两个符号)
  56. val g = a.+:(7,8,9)
  57. println(g)
  58.  
  59. val h = a.::(7,8,9)
  60. println(h)
  61.  
  62. }
  63.  
  64. @Test
  65. def test4():Unit={
  66. val a=List(1,2,3,4,5,6,7,8,9)
  67. val b = a.drop(3)
  68. println(b)//List(4, 5, 6, 7, 8, 9)
  69.  
  70. val c = a.dropRight(3)
  71. println(c)//List(1, 2, 3, 4, 5, 6)
  72.  
  73. val a2=List(8,2,2,1,5,7,9)
  74. // val d = a2.dropWhile(_%2==0)
  75. val d = a2.dropWhile((x)=>x%2==0)//逐个匹配去除符合条件的元素,直到不符合条件,之后的元素不再判断
  76. println(d)//List(1, 5, 7, 9)
  77.  
  78. //查询
  79. println( a2(0))
  80. //修改
  81. //a2(0)=999// 修改失败 不导包不能修改,因为List默认是不可变包中的List
  82. println(a2(0))
  83.  
  84. val ints = scala.collection.mutable.ListBuffer[Int](1,5,6)
  85. println(ints(0))
  86. ints(0)=999
  87. println(ints(0))
  88. }
  89.  
  90. //A=B B=C 推出A=C 等效推算(定义变量/定义集合这些存数据的地方,默认常用不可变) 很多东西默认不可变,更符合机器逻辑
  91.  
  92. @Test
  93. def test5(): Unit ={
  94. val a="ccc"::("bbb"::("aaa"::Nil))
  95. println(a)//List(ccc, bbb, aaa)
  96.  
  97. val b=List(1,2,3)
  98. val c=List(3,4,5)
  99. val d=b++c//List(1, 2, 3, 3, 4, 5)
  100. println(d)
  101. println(b.sum)//6
  102.  
  103. val list = List(1, 2, 3, 4, 5, 6, 7)
  104. println(list.take(5))//List(1, 2, 3, 4, 5)
  105. println(list.takeWhile(_<=3))//List(1, 2, 3)
  106. println(list.takeWhile(_>3))//List()
  107. println(list.mkString)//1234567
  108. println(list.count(_%2==0))//3
  109.  
  110. }
  111.  
  112. }
  1. package com.yz8
  2.  
  3. import org.junit.Test
  4.  
  5. import scala.beans.BeanProperty
  6. import scala.collection.mutable
  7.  
  8. class test2 {
  9.  
  10. @Test
  11. def test1(): Unit ={
  12. val set=Set(1,2,6)
  13. val set2=set+(1,2,8)
  14. set2.foreach(println(_))
  15.  
  16. }
  17.  
  18. @Test
  19. def test2(): Unit ={
  20. //set不保留添加顺序
  21. val set=Set(1,2,6,'a','b')
  22. set.foreach(println(_))
  23. //1
  24. //6
  25. //97
  26. //2
  27. //98
  28.  
  29. //linkHashSet保留添加顺序
  30. val linkset=scala.collection.mutable.LinkedHashSet(1,3,6,'a','b')
  31. linkset.foreach(println(_))
  32. //1
  33. //3
  34. //6
  35. //97
  36. //98
  37.  
  38. println("__________")
  39.  
  40. //SortedSet 默认升序
  41. val sortedset=scala.collection.mutable.SortedSet(1,4,6,-100,-1)
  42.  
  43. sortedset.foreach(println(_))
  44. }
  45.  
  46. @Test
  47. def test3(): Unit ={
  48. //按名字升序,按年龄升序[向集合中传递一个比较器]
  49.  
  50. var set=mutable.SortedSet[Person]()(new Ordering[Person] {
  51. override def compare(x: Person, y: Person): Int = {
  52. //按名字比较
  53. val ret=x.getName.compareTo(y.getName)
  54.  
  55. if(ret==0){
  56. val ret=x.getAge.compareTo(y.getAge)
  57. }
  58. ret
  59.  
  60. }
  61. })
  62.  
  63. set.add(new Person("a",20))
  64. set.add(new Person("w",30))
  65. set.add(new Person("e",50))
  66. set.add(new Person("f",10))
  67. set.foreach(println(_))
  68.  
  69. }
  70.  
  71. @Test
  72. def test4(): Unit ={
  73. //命题:按年龄升序,如果相同,名字降序
  74. val set = mutable.SortedSet[Person2]()
  75.  
  76. set.add(new Person2("a",20))
  77. set.add(new Person2("w",30))
  78. set.add(new Person2("e",50))
  79. set.add(new Person2("f",10))
  80. set.foreach(println(_))
  81.  
  82. //两种方式实现SortedSet的比较规则:
  83. // 1在SortedSet中传递Ordering的比较器
  84. //2被比较对象类中extends Ordered特质
  85. //2选1 本质上两种方式都是重写了compare()方法
  86. }
  87.  
  88. @Test
  89. def test5(): Unit ={
  90. //foreach
  91.  
  92. val data=1 to 10
  93. //data.foreach(println(_))
  94.  
  95. //高阶函数
  96. data.foreach(x=>println(x))
  97.  
  98. println("-------------")
  99. val list = List("aa","bb","cc","dd")
  100. //val strings = list.map(_+1+4)
  101. val strings = list.map(x=>x+1+4)
  102. //将元素作用在一个函数上
  103. //y=x+1
  104.  
  105. strings.foreach(println(_))
  106.  
  107. //flatMap
  108. println("----------------")
  109. val list2 = List("aa bb cc","aa ff","cc","ww cc")
  110. //分割单词
  111. list2.flatMap(_.split(" ")).foreach(println(_))
  112.  
  113. }
  114.  
  115. @Test
  116. def test6(): Unit ={
  117. //匹配
  118. var name=""
  119. val ch:Char='7'
  120.  
  121. name=ch match {
  122. case 'b'=>"小明"
  123. case 'a'=>"小红"
  124. case 'w'=>"小黑"
  125. case 'f'=>"小白"
  126. case _ if Character.isDigit(ch)=>"王思冲"//一般把case _放在末尾,放在第一行不管什么情况都会只执行该语句
  127. //如果没有_ 匹配不上会报MatchError
  128.  
  129. case _ if Character.isAlphabetic(ch)=>"薛之谦"
  130. }
  131. println(name)
  132. }
  133.  
  134. @Test
  135. def test7(): Unit ={
  136. //相当于 .foreach()
  137. "Hello, world" foreach(c=>println(
  138. c match {
  139. case ' '=>"空格"
  140. case y=>"中国"+y //y不是去匹配,而是作为变量接收值
  141. }
  142. //case后如果写值,就表示匹配这个值,如果写变量名,就表示接收这个值
  143. ))
  144. //中国H
  145. //中国e
  146. //中国l
  147. //中国l
  148. //中国o
  149. //中国,
  150. //空格
  151. //中国w
  152. //中国o
  153. //中国r
  154. //中国l
  155. //中国d
  156. }
  157.  
  158. @Test
  159. def test8(): Unit ={
  160. //println(Int.MaxValue)//2147483647
  161.  
  162. //代替isInstanceOf和asInstanceOf
  163. def myConvert(x:Any):Int={
  164. val retust=
  165. x match {
  166. case i:Int=>i
  167. case s:String=>Integer.parseInt(s)
  168. case m:BigInt=>Int.MaxValue
  169. case c:Char=>c.toInt
  170. case _=>0
  171. }
  172. retust
  173.  
  174. }
  175. val res1 = myConvert("123")
  176. println(res1==123)//true
  177. val res2 = myConvert(true)
  178. println(res2)
  179.  
  180. }
  181.  
  182. @Test
  183. def test9(): Unit ={
  184. val tup=(5,6)//注元组中无法匹配这两种情况既case(x,y)和case_
  185. tup match {
  186. case (1,2)=>println(1,2)
  187. case (0,_)=>println(0+".....")//元组中不能用_*
  188. case (x,y)=>println(x+"...."+y)
  189. case _=>println("其它情况")
  190. }
  191. }
  192.  
  193. @Test
  194. def test10(): Unit ={
  195. val array = Array(1)
  196. array match {
  197. case Array(0)=>println(0)//只有一个元素且为0
  198. case Array(x,y)=>println(x+" "+y)//两个元素
  199. case Array(0,_*)=>println(0+"...")//任意以0开头
  200. case _=>println("else")
  201. }
  202. }
  203.  
  204. @Test
  205. def test11(): Unit ={
  206. //样例类(类前加case 关键字)--可以用match case结构中
  207. case class Abc(name:String)
  208. case class Efg(name:String,age:Int)
  209. case class Xyz(name:String,address:String)
  210. //样例类会自动为属性添加get set 也会字段提供伴生对象
  211. val abc = Abc("小白")//创建了一个abc对象
  212. println(abc.name)
  213.  
  214. var x=Efg("哈哈",100)
  215. x match {
  216. case Abc(name)=>println(s"$name")
  217. case Efg(name,age)=>println(s"$name----$age")
  218. case Xyz(name,address)=>println(s"$name-----$address")
  219. case _=>println("默认选项")
  220. }
  221. }
  222.  
  223. @Test
  224. def test12(): Unit ={
  225. //样例类 模拟枚举(列举)
  226. sealed abstract class TrafficLightColor//交通灯
  227. case object Red extends TrafficLightColor
  228. case object Yellow extends TrafficLightColor
  229. case object Green extends TrafficLightColor
  230.  
  231. def show(color:TrafficLightColor):Unit={
  232. color match {
  233. case Red => println("红灯")
  234. case Yellow => println("黄灯")
  235. case Green => println("绿灯")
  236. }
  237. }
  238. show(Yellow)
  239.  
  240. }
  241.  
  242. @Test
  243. def test13(): Unit ={
  244. //了解option--兼容有值Some()或没值None 可以支持泛型
  245. val map = Map("a"->10,"b"->20,"c"->30)
  246. def show(x:Option[Int]): Unit ={
  247. x match {
  248. case Some(s)=>println(s)
  249. case None=>println("没值")
  250. }
  251. }
  252. show(map.get("f"))//没值
  253. show(map.get("a"))//10
  254.  
  255. println(map.get("a"))//Some(10)
  256. println(map.get("e"))//None
  257. }
  258.  
  259. @Test
  260. def test14(): Unit ={
  261. val a:Option[Int]=Some(5)
  262. val b:Option[Int]=None
  263. //能取到值就取出原值,取不出就取出默认值
  264. println(a.getOrElse(0))//5
  265. println(b.getOrElse(100))//100
  266.  
  267. println(a.isEmpty)//判断是否为空
  268. println(b.isEmpty)
  269. }
  270.  
  271. }
  272.  
  273. class Person{
  274. @BeanProperty
  275. var name:String=_
  276. @BeanProperty
  277. var age:Int=_
  278.  
  279. override def toString = s"Person($name, $age)"
  280.  
  281. def this(n:String,a:Int){
  282. this()
  283. this.name=n
  284. this.age=a
  285. }
  286.  
  287. }
  288.  
  289. class Person2 extends Ordered[Person2]{
  290. @BeanProperty
  291. var name:String=_
  292. @BeanProperty
  293. var age:Int=_
  294.  
  295. override def toString = s"Person($name, $age)"
  296.  
  297. def this(n:String,a:Int){
  298. this()
  299. this.name=n
  300. this.age=a
  301. }
  302.  
  303. override def compare(that: Person2): Int = {
  304. //升序--前者比后者
  305. //降序--后者比前者
  306. //命题:按年龄升序,如果相同,名字降序
  307. val ret = this.age.compareTo(that.age)
  308.  
  309. if(ret==0){
  310. val ret = that.name.compareTo(this.name)
  311. }
  312. ret
  313. }
  314. }

Scala集合库、模式匹配和样例类的更多相关文章

  1. Scala基础:模式匹配和样例类

    模式匹配 package com.zy.scala import scala.util.Random /** * 模式匹配 */ object CaseDemo { def main(args: Ar ...

  2. 学好Spark/Kafka必须要掌握的Scala技术点(二)类、单例/伴生对象、继承和trait,模式匹配、样例类(case class)

    3. 类.对象.继承和trait 3.1 类 3.1.1 类的定义 Scala中,可以在类中定义类.以在函数中定义函数.可以在类中定义object:可以在函数中定义类,类成员的缺省访问级别是:publ ...

  3. 大数据学习day16------第三阶段-----scala04--------1. 模式匹配和样例类 2 Akka通信框架

    1. 模式匹配和样例类 Scala有一个十分强大的模式匹配机制,可以应用到很多场合:如switch语句.类型检查等.并且Scala还提供了样例类,对模式匹配进行了优化,可以快速进行匹配 1.1 模式匹 ...

  4. 【Scala篇】--Scala中Trait、模式匹配、样例类、Actor模型

    一.前述 Scala Trait(特征) 相当于 Java 的接口,实际上它比接口还功能强大. 模式匹配机制相当于java中的switch-case. 使用了case关键字的类定义就是样例类(case ...

  5. Scala模式匹配和样例类

    Scala有一个十分强大的模式匹配机制,可以应用到很多场合:如switch语句.类型检查等.并且Scala还提供了样例类,对模式匹配进行了优化,可以快速进行匹配. 1.字符匹配     def mai ...

  6. Scala学习十四——模式匹配和样例类

    一.本章要点 match表达式是更好的switch,不会有意外调入下一个分支 如果没有模式能够匹配,会抛出MatchError,可以用case _模式避免 模式可以包含一个随意定义的条件,称做守卫 你 ...

  7. scala模式匹配与样例类

    样本类:添加了case的类便是样本类.这种修饰符可以让Scala编译器自动为这个类添加一些语法上的便捷设定.如下: 1.添加与类名一致的工厂方法.也就是说,可以写成Var("x") ...

  8. Scala-Unit6-final/type关键字、样例类&样例对象

    一.关键字 1.final关键字 用final修饰的类:不能被继承 用final修饰的方法:不能被重写 注意:(1)在Scala中变量不需要用final修饰,因为val与var已经限制了变量是否可变 ...

  9. Scala--模式匹配和样例类

    模式匹配应用场景:switch语句,类型查询,析构,样例类 一.更好的switch val ch :Char = '+' val sign = ch match{ case '+' => 1 c ...

随机推荐

  1. 20210105 - python自动化办公简介

    新的一年开始了, 计划每周至少更新三篇博客. 人生苦短,如果不做改变,人生很快会过去!2021年寻求改变,加油! python自动化办公: 1.相关工具与环境的安装概要: 需要用到python(一种开 ...

  2. 基于CefSharp开发(七)浏览器收藏夹菜单

    一.Edge收藏夹菜单分析 如下图所示为Edge收藏夹菜单, 点击收藏夹菜单按钮(红框部分)弹出收藏夹菜单窗体,窗体中包含工具栏(绿框部分)和树型菜单(黄框部分) 工具栏按钮功能分别为添加当前网页到根 ...

  3. Vue.nextTick()的使用

    什么是Vue.nextTick()?? 定义:在下次 DOM 更新循环结束之后执行延迟回调.在修改数据之后立即使用这个方法,获取更新后的 DOM. 所以就衍生出了这个获取更新后的DOM的Vue方法.所 ...

  4. GCC 概述:C 语言编译过程详解

    Tags: C Description: 关于 GCC 的个人笔记 GCC 概述 对于 GCC 6.1 以及之后的版本,默认使用的 C++ 标准是 C++ 14:使用 -std=c++11 来指定使用 ...

  5. Jenkins上实现Python + Jenkins + Allure Report 接口自动化测试持续集成,最终测试报告用allure-report进行展示

    项目介绍 接口功能测试应用:http://www.weather.com.cn/data/cityinfo/<city_code>.html 测试功能:获取对应城市的天气预报 源码:Pyt ...

  6. 【Linux】Linux下如何分区及如何格式化

    环境:CentOS7.1 磁盘大小是1.8T 将磁盘/dev/sda分一个分区,分区类型为xfs fdisk /dev/sda n    --创建新分区 p  --创建分区类型为主分区 1  --主分 ...

  7. Loadrunner参数化数据配置与更新方式

    之前遇到过一种情况,对脚本进行并发测试时,脚本没有报错,但是有丢失的事物,与开发配合检查确定不是代码的问题,然后检查脚本,更换参数化数据配置与更新方式,问题解决.现在对参数化数据配置和更新方式进行总结 ...

  8. 手机QQ空间自动点赞登录

    学以致用~使用 Appium 模拟人类操控手机行为 V2.0在手机上运行,目前实现以下功能: 1.小黑屋模式,一分钟内给好友发100条消息然后进了好友的小黑屋 2.定时发消息提醒对象多喝热水~ 3.对 ...

  9. mysql 设置外键约束时如何删除数据

    Mysql中如果表和表之间建立的外键约束,则无法删除表及修改表结构 解决方法是在Mysql中取消外键约束: SET FOREIGN_KEY_CHECKS=0; 然后将原来表的数据导出到sql语句,重新 ...

  10. 如何封装Promise对象?

    最近看到了一个有趣的Promise的方法,这里记录下来 <script> class MyPromise { constructor(executor) { // 初始化state赋值为p ...