当前位置: 首页 > news >正文

odoo与wordpress/seo成都培训

odoo与wordpress,seo成都培训,昆明seocn整站优化,自搭建网站240520Scala笔记 第 7 章 集合 7.1 集合1 数组Array 集合(Test01_ImmutableArray): package chapter07 ​ object Test01_ImmutableArray {def main(args: Array[String]): Unit {// 1. 创建数组val arr: Array[Int] new Array[Int](5)// 另一种创建方式val arr2 Array(…

240520Scala笔记

第 7 章 集合

7.1 集合1 数组Array

集合(Test01_ImmutableArray):

package chapter07
​
object Test01_ImmutableArray {def main(args: Array[String]): Unit = {// 1. 创建数组val arr: Array[Int] = new Array[Int](5)// 另一种创建方式val arr2 = Array(12, 37, 42, 58, 97)println(arr)
​// 2. 访问元素println(arr(0))println(arr(1))println(arr(4))
//    println(arr(5))
​arr(0) = 12arr(4) = 57println(arr(0))println(arr(1))println(arr(4))
​println("========================")
​// 3. 数组的遍历// 1) 普通for循环for (i <- 0 until arr.length){println(arr(i))}
​for (i <- arr.indices) println(arr(i))
​println("---------------------")
​// 2) 直接遍历所有元素,增强for循环for (elem <- arr2) println(elem)
​println("---------------------")
​// 3) 迭代器val iter = arr2.iterator
​while (iter.hasNext)println(iter.next())
​println("---------------------")
​// 4) 调用foreach方法arr2.foreach( (elem: Int) => println(elem) )
​arr.foreach( println )
​println(arr2.mkString("--"))
​println("========================")// 4. 添加元素val newArr = arr2.:+(73)println(arr2.mkString("--"))println(newArr.mkString("--"))
​val newArr2 = newArr.+:(30)println(newArr2.mkString("--"))
​val newArr3 = newArr2 :+ 15val newArr4 = 19 +: 29 +: newArr3 :+ 26 :+ 73println(newArr4.mkString(", "))}
}
​

不可变数组用 +: 或 :+ 追加元素 可变数组用 arr1.append(6) 追加元素

7.2 集合2

package chapter07
​
import scala.collection.mutable
import scala.collection.mutable.ArrayBuffer
​
object Test02_ArrayBuffer {def main(args: Array[String]): Unit = {// 1. 创建可变数组val arr1: ArrayBuffer[Int] = new ArrayBuffer[Int]()val arr2 = ArrayBuffer(23, 57, 92)
​println(arr1)println(arr2)
​// 2. 访问元素
//    println(arr1(0))     // errorprintln(arr2(1))arr2(1) = 39println(arr2(1))
​println("======================")// 3. 添加元素val newArr1 = arr1 :+ 15println(arr1)println(newArr1)println(arr1 == newArr1)
​val newArr2 = arr1 += 19println(arr1)println(newArr2)println(arr1 == newArr2)newArr2 += 13println(arr1)
​77 +=: arr1println(arr1)println(newArr2)
​arr1.append(36)arr1.prepend(11, 76)arr1.insert(1, 13, 59)println(arr1)
​arr1.insertAll(2, newArr1)arr1.prependAll(newArr2)
​println(arr1)
​// 4. 删除元素arr1.remove(3)println(arr1)
​arr1.remove(0, 10)println(arr1)
​arr1 -= 13println(arr1)
​// 5. 可变数组转换为不可变数组val arr: ArrayBuffer[Int] = ArrayBuffer(23, 56, 98)val newArr: Array[Int] = arr.toArrayprintln(newArr.mkString(", "))println(arr)
​// 6. 不可变数组转换为可变数组val buffer: mutable.Buffer[Int] = newArr.toBufferprintln(buffer)println(newArr)}
}

arr.toArray 变成不可变数组 newArr.toBuffer 变成可变数组

7.3 集合3

package chapter07
​
object Test03_MulArray {def main(args: Array[String]): Unit = {// 1. 创建二维数组val array: Array[Array[Int]] = Array.ofDim[Int](2, 3)
​// 2. 访问元素array(0)(2) = 19array(1)(0) = 25
​println(array.mkString(", "))for (i <- 0 until array.length; j <- 0 until array(i).length){println(array(i)(j))}for (i <- array.indices; j <- array(i).indices){print(array(i)(j) + "\t")if (j == array(i).length - 1) println()}
​array.foreach(line => line.foreach(println))
​array.foreach(_.foreach(println))}
}
​

7.4 集合4 列表List

package chapter07
​
object Test04_List {def main(args: Array[String]): Unit = {// 1. 创建一个Listval list1 = List(23, 65, 87)println(list1)
​// 2. 访问和遍历元素println(list1(1))
//    list1(1) = 12list1.foreach(println)
​// 3. 添加元素val list2 = 10 +: list1val list3 = list1 :+ 23println(list1)println(list2)println(list3)
​println("==================")
​val list4 = list2.::(51)println(list4)
​val list5 = Nil.::(13)println(list5)
​val list6 = 73 :: 32 :: Nilval list7 = 17 :: 28 :: 59 :: 16 :: Nilprintln(list7)
​// 4. 合并列表val list8 = list6 :: list7println(list8)
​val list9 = list6 ::: list7println(list9)
​val list10 = list6 ++ list7println(list10)
​}
}
​

7.5 集合5

package chapter07
​
import scala.collection.mutable.ListBuffer
​
object Test05_ListBuffer {def main(args: Array[String]): Unit = {// 1. 创建可变列表val list1: ListBuffer[Int] = new ListBuffer[Int]()val list2 = ListBuffer(12, 53, 75)
​println(list1)println(list2)
​println("==============")
​// 2. 添加元素list1.append(15, 62)list2.prepend(20)
​list1.insert(1, 19, 22)
​println(list1)println(list2)
​println("==============")
​31 +=: 96 +=: list1 += 25 += 11println(list1)
​println("==============")// 3. 合并listval list3 = list1 ++ list2println(list1)println(list2)
​println("==============")
​list1 ++=: list2println(list1)println(list2)
​println("==============")
​// 4. 修改元素list2(3) = 30list2.update(0, 89)println(list2)
​// 5. 删除元素list2.remove(2)list2 -= 25println(list2)}
}
​

7.6 集合6 数集Set

package chapter07
​
object Test06_ImmutableSet {def main(args: Array[String]): Unit = {// 1. 创建setval set1 = Set(13, 23, 53, 12, 13, 23, 78)println(set1)
​println("==================")
​// 2. 添加元素val set2 = set1 + 129println(set1)println(set2)println("==================")
​// 3. 合并setval set3 = Set(19, 13, 23, 53, 67, 99)val set4 = set2 ++ set3println(set2)println(set3)println(set4)
​// 4. 删除元素val set5 = set3 - 13println(set3)println(set5)}
}
​

7.7 集合7

package chapter07
​
import scala.collection.mutable
​
object Test07_MutableSet {def main(args: Array[String]): Unit = {// 1. 创建setval set1: mutable.Set[Int] = mutable.Set(13, 23, 53, 12, 13, 23, 78)println(set1)
​println("==================")
​// 2. 添加元素val set2 = set1 + 11println(set1)println(set2)
​set1 += 11println(set1)
​val flag1 = set1.add(10)println(flag1)println(set1)val flag2 = set1.add(10)println(flag2)println(set1)
​println("==================")
​// 3. 删除元素set1 -= 11println(set1)
​val flag3 = set1.remove(10)println(flag3)println(set1)val flag4 = set1.remove(10)println(flag4)println(set1)
​println("==================")
​// 4. 合并两个Set
//    val set3 =
val set3 = Set(13, 12, 13, 27, 98)println(set1)println(set3)println("==================")set1 ++ set3val set4 = set1 ++ set3println(set1)println(set3)println(set4)println("==================")println(set1)println(set3)set1 ++= set3println(set1)}
}

7.8 集合8 映射(散列表)Map

package chapter07
​
object Test08_ImmutableMap {def main(args: Array[String]): Unit = {// 1. 创建mapval map1: Map[String, Int] = Map("a" -> 13, "b" -> 25, "hello" -> 3)println(map1)println(map1.getClass)
​println("==========================")// 2. 遍历元素map1.foreach(println)map1.foreach( (kv: (String, Int)) => println(kv) )
​println("============================")
​// 3. 取map中所有的key 或者 valuefor (key <- map1.keys){println(s"$key ---> ${map1.get(key)}")}
​// 4. 访问某一个key的valueprintln("a: " + map1.get("a").get)println("c: " + map1.get("c"))println("c: " + map1.getOrElse("c", 0))
​println(map1("a"))}
}
​

7.9 集合9

package chapter07import scala.collection.mutableobject Test09_MutableMap {def main(args: Array[String]): Unit = {// 1. 创建mapval map1: mutable.Map[String, Int] = mutable.Map("a" -> 13, "b" -> 25, "hello" -> 3)println(map1)println(map1.getClass)println("==========================")// 2. 添加元素map1.put("c", 5)map1.put("d", 9)println(map1)map1 += (("e", 7))println(map1)println("====================")// 3. 删除元素println(map1("c"))map1.remove("c")println(map1.getOrElse("c", 0))map1 -= "d"println(map1)println("====================")// 4. 修改元素map1.update("c", 5)map1.update("e", 10)println(map1)println("====================")// 5. 合并两个Mapval map2: Map[String, Int] = Map("aaa" -> 11, "b" -> 29, "hello" -> 5)
//    map1 ++= map2println(map1)println(map2)println("---------------------------")val map3: Map[String, Int] = map2 ++ map1println(map1)println(map2)println(map3)}
}

7.10 集合10 元祖tuple

package chapter07object Test10_Tuple {def main(args: Array[String]): Unit = {// 1. 创建元组val tuple: (String, Int, Char, Boolean) = ("hello", 100, 'a', true)println(tuple)// 2. 访问数据println(tuple._1)println(tuple._2)println(tuple._3)println(tuple._4)println(tuple.productElement(1))println("====================")// 3. 遍历元组数据for (elem <- tuple.productIterator)println(elem)// 4. 嵌套元组val mulTuple = (12, 0.3, "hello", (23, "scala"), 29)println(mulTuple._4._2)}
}

7.11 集合11 集合的常用函数

package chapter07object Test11_CommonOp {def main(args: Array[String]): Unit = {val list = List(1,3,5,7,2,89)val set = Set(23,34,423,75)//    (1)获取集合长度println(list.length)//    (2)获取集合大小println(set.size)//    (3)循环遍历for (elem <- list)println(elem)set.foreach(println)//    (4)迭代器for (elem <- list.iterator) println(elem)println("====================")//    (5)生成字符串println(list)println(set)println(list.mkString("--"))//    (6)是否包含println(list.contains(23))println(set.contains(23))}
}

这个比较实用一点 !!!

7.12 集合12 衍生集合

package chapter07object Test12_DerivedCollection {def main(args: Array[String]): Unit = {val list1 = List(1,3,5,7,2,89)val list2 = List(3,7,2,45,4,8,19)//    (1)获取集合的头println(list1.head)//    (2)获取集合的尾(不是头的就是尾)println(list1.tail)//    (3)集合最后一个数据println(list2.last)//    (4)集合初始数据(不包含最后一个)println(list2.init)//    (5)反转println(list1.reverse)//    (6)取前(后)n个元素println(list1.take(3))println(list1.takeRight(4))//    (7)去掉前(后)n个元素println(list1.drop(3))println(list1.dropRight(4))println("=========================")//    (8)并集val union = list1.union(list2)println("union: " + union)println(list1 ::: list2)// 如果是set做并集,会去重val set1 = Set(1,3,5,7,2,89)val set2 = Set(3,7,2,45,4,8,19)val union2 = set1.union(set2)println("union2: " + union2)println(set1 ++ set2)println("-----------------------")//    (9)交集val intersection = list1.intersect(list2)println("intersection: " + intersection)println("-----------------------")//    (10)差集val diff1 = list1.diff(list2)val diff2 = list2.diff(list1)println("diff1: " + diff1)println("diff2: " + diff2)println("-----------------------")//    (11)拉链println("zip: " + list1.zip(list2))println("zip: " + list2.zip(list1))println("-----------------------")//    (12)滑窗for (elem <- list1.sliding(3))println(elem)println("-----------------------")for (elem <- list2.sliding(4, 2))println(elem)println("-----------------------")for (elem <- list2.sliding(3, 3))println(elem)}
}

7.13 集合13 集合计算简单函数(sum求和...)

package chapter07object Test13_SimpleFunction {def main(args: Array[String]): Unit = {val list = List(5,1,8,2,-3,4)val list2 = List(("a", 5), ("b", 1), ("c", 8), ("d", 2), ("e", -3), ("f", 4))//    (1)求和var sum = 0for (elem <- list){sum += elem}println(sum)println(list.sum)//    (2)求乘积println(list.product)//    (3)最大值println(list.max)println(list2.maxBy( (tuple: (String, Int)) => tuple._2 ))println(list2.maxBy( _._2 ))//    (4)最小值println(list.min)println(list2.minBy(_._2))println("========================")//    (5)排序// 5.1 sortedval sortedList = list.sortedprintln(sortedList)// 从大到小逆序排序println(list.sorted.reverse)// 传入隐式参数println(list.sorted(Ordering[Int].reverse))println(list2.sorted)// 5.2 sortByprintln(list2.sortBy(_._2))println(list2.sortBy(_._2)(Ordering[Int].reverse))// 5.3 sortWithprintln(list.sortWith( (a: Int, b: Int) => {a < b} ))println(list.sortWith( _ < _ ))println(list.sortWith( _ > _))}
}

7.14 集合14 集合计算高级函数(过滤...)

package chapter07object Test14_HighLevelFunction_Map {def main(args: Array[String]): Unit = {val list = List(1,2,3,4,5,6,7,8,9)// 1. 过滤// 选取偶数val evenList = list.filter( (elem: Int) => {elem % 2 == 0} )println(evenList)// 选取奇数println(list.filter( _ % 2 == 1 ))println("=======================")// 2. 映射map// 把集合中每个数乘2println(list.map(_ * 2))println(list.map( x => x * x))println("=======================")// 3. 扁平化val nestedList: List[List[Int]] = List(List(1,2,3),List(4,5),List(6,7,8,9))val flatList = nestedList(0) ::: nestedList(1) ::: nestedList(2)println(flatList)val flatList2 = nestedList.flattenprintln(flatList2)println("=======================")// 4. 扁平映射// 将一组字符串进行分词,并保存成单词的列表val strings: List[String] = List("hello world", "hello scala", "hello java", "we study")val splitList: List[Array[String]] = strings.map( _.split(" ") )    // 分词val flattenList = splitList.flatten    // 打散扁平化println(flattenList)val flatmapList = strings.flatMap(_.split(" "))println(flatmapList)println("========================")// 5. 分组groupBy// 分成奇偶两组val groupMap: Map[Int, List[Int]] = list.groupBy( _ % 2)val groupMap2: Map[String, List[Int]] = list.groupBy( data => if (data % 2 == 0) "偶数" else "奇数")println(groupMap)println(groupMap2)// 给定一组词汇,按照单词的首字母进行分组val wordList = List("china", "america", "alice", "canada", "cary", "bob", "japan")println( wordList.groupBy( _.charAt(0) ) )}
}

7.15 集合15 redeuc归约,fold折叠

package chapter07object Test15_HighLevelFunction_Reduce {def main(args: Array[String]): Unit = {val list = List(1,2,3,4)// 1. reduceprintln(list.reduce( _ + _ ))println(list.reduceLeft(_ + _))println(list.reduceRight(_ + _))println("===========================")val list2 = List(3,4,5,8,10)println(list2.reduce(_ - _))    // -24println(list2.reduceLeft(_ - _))println(list2.reduceRight(_ - _))    // 3 - (4 - (5 - (8 - 10))), 6println("===========================")// 2. foldprintln(list.fold(10)(_ + _))     // 10 + 1 + 2 + 3 + 4println(list.foldLeft(10)(_ - _))    // 10 - 1 - 2 - 3 - 4println(list2.foldRight(11)(_ - _))    // 3 - (4 - (5 - (8 - (10 - 11)))),  -5}
}

7.16 集合16 合并列表(如果有相同的key就把value值相加)

package chapter07import scala.collection.mutableobject Test16_MergeMap {def main(args: Array[String]): Unit = {val map1 = Map("a" -> 1, "b" -> 3, "c" -> 6)val map2 = mutable.Map("a" -> 6, "b" -> 2, "c" -> 9, "d" -> 3)//    println(map1 ++ map2)val map3 = map1.foldLeft(map2)((mergedMap, kv) => {val key = kv._1val value = kv._2mergedMap(key) = mergedMap.getOrElse(key, 0) + valuemergedMap})println(map3)}
}

7.17 集合17

package chapter07object Test17_CommonWordCount {def main(args: Array[String]): Unit = {val stringList: List[String] = List("hello","hello world","hello scala","hello spark from scala","hello flink from scala")// 1. 对字符串进行切分,得到一个打散所有单词的列表
//    val wordList1: List[Array[String]] = stringList.map(_.split(" "))
//    val wordList2: List[String] = wordList1.flatten
//    println(wordList2)val wordList = stringList.flatMap(_.split(" "))println(wordList)// 2. 相同的单词进行分组val groupMap: Map[String, List[String]] = wordList.groupBy(word => word)println(groupMap)// 3. 对分组之后的list取长度,得到每个单词的个数val countMap: Map[String, Int] = groupMap.map(kv => (kv._1, kv._2.length))// 4. 将map转换为list,并排序取前3val sortList: List[(String, Int)] = countMap.toList.sortWith( _._2 > _._2 ).take(3)println(sortList)}
}

7.18 集合18

package chapter07object Test18_ComplexWordCount {def main(args: Array[String]): Unit = {val tupleList: List[(String, Int)] = List(("hello", 1),("hello world", 2),("hello scala", 3),("hello spark from scala", 1),("hello flink from scala", 2))// 思路一:直接展开为普通版本val newStringList: List[String] = tupleList.map(kv => {(kv._1.trim + " ") * kv._2})println(newStringList)// 接下来操作与普通版本完全一致val wordCountList: List[(String, Int)] = newStringList.flatMap(_.split(" "))    // 空格分词.groupBy( word => word )     // 按照单词分组.map( kv => (kv._1, kv._2.size) )     // 统计出每个单词的个数.toList.sortBy(_._2)(Ordering[Int].reverse).take(3)println(wordCountList)println("================================")// 思路二:直接基于预统计的结果进行转换// 1. 将字符串打散为单词,并结合对应的个数包装成二元组val preCountList: List[(String, Int)] = tupleList.flatMap(tuple => {val strings: Array[String] = tuple._1.split(" ")strings.map( word => (word, tuple._2) )})println(preCountList)// 2. 对二元组按照单词进行分组val preCountMap: Map[String, List[(String, Int)]] = preCountList.groupBy( _._1 )println(preCountMap)// 3. 叠加每个单词预统计的个数值val countMap: Map[String, Int] = preCountMap.mapValues(tupleList => tupleList.map(_._2).sum).toMapprintln(countMap)// 4. 转换成list,排序取前3val countList = countMap.toList.sortWith(_._2 > _._2).take(3)println(countList)}
}

7.19 集合19

package chapter07import scala.collection.immutable.Queue
import scala.collection.mutable
import scala.collection.parallel.immutableobject Test19_Queue {def main(args: Array[String]): Unit = {// 创建一个可变队列val queue: mutable.Queue[String] = new mutable.Queue[String]()queue.enqueue("a", "b", "c")println(queue)println(queue.dequeue())println(queue)println(queue.dequeue())println(queue)queue.enqueue("d", "e")println(queue)println(queue.dequeue())println(queue)println("==========================")// 不可变队列val queue2: Queue[String] = Queue("a", "b", "c")val queue3 = queue2.enqueue("d")println(queue2)println(queue3)}
}

7.20 集合20

package chapter07import scala.collection.immutable
import scala.collection.parallel.immutable.ParSeqobject Test20_Parallel {def main(args: Array[String]): Unit = {val result: immutable.IndexedSeq[Long] = (1 to 100).map(x => Thread.currentThread.getId)println(result)val result2: ParSeq[Long] = (1 to 100).par.map(x => Thread.currentThread.getId)println(result2)}
}

第 8 章 模式匹配

8.1 模式匹配1

package chapter08object Test01_PatternMatchBase {def main(args: Array[String]): Unit = {// 1. 基本定义语法val x: Int = 5val y: String = x match {case 1 => "one"case 2 => "two"case 3 => "three"case _ => "other"}println(y)// 2. 示例:用模式匹配实现简单二元运算val a = 25val b = 13def matchDualOp(op: Char): Int = op match {case '+' => a + bcase '-' => a - bcase '*' => a * bcase '/' => a / bcase '%' => a % bcase _ => -1}println(matchDualOp('+'))println(matchDualOp('/'))println(matchDualOp('\\'))println("=========================")// 3. 模式守卫// 求一个整数的绝对值def abs(num: Int): Int = {num match {case i if i >= 0 => icase i if i < 0 => -i}}println(abs(67))println(abs(0))println(abs(-24))}
}

8.2 模式匹配2

package chapter08object Test02_MatchTypes {def main(args: Array[String]): Unit = {// 1. 匹配常量def describeConst(x: Any): String = x match {case 1 => "Int one"case "hello" => "String hello"case true => "Boolean true"case '+' => "Char +"case _ => ""}println(describeConst("hello"))println(describeConst('+'))println(describeConst(0.3))println("==================================")// 2. 匹配类型def describeType(x: Any): String = x match {case i: Int => "Int " + icase s: String => "String " + scase list: List[String] => "List " + listcase array: Array[Int] => "Array[Int] " + array.mkString(",")case a => "Something else: " + a}println(describeType(35))println(describeType("hello"))println(describeType(List("hi", "hello")))println(describeType(List(2, 23)))println(describeType(Array("hi", "hello")))println(describeType(Array(2, 23)))// 3. 匹配数组for (arr <- List(Array(0),Array(1, 0),Array(0, 1, 0),Array(1, 1, 0),Array(2, 3, 7, 15),Array("hello", 1, 30),)) {val result = arr match {case Array(0) => "0"case Array(1, 0) => "Array(1, 0)"case Array(x, y) => "Array: " + x + ", " + y    // 匹配两元素数组case Array(0, _*) => "以0开头的数组"case Array(x, 1, z) => "中间为1的三元素数组"case _ => "something else"}println(result)}println("=========================")// 4. 匹配列表// 方式一for (list <- List(List(0),List(1, 0),List(0, 0, 0),List(1, 1, 0),List(88),List("hello"))) {val result = list match {case List(0) => "0"case List(x, y) => "List(x, y): " + x + ", " + ycase List(0, _*) => "List(0, ...)"case List(a) => "List(a): " + acase _ => "something else"}println(result)}// 方式二val list1 = List(1, 2, 5, 7, 24)val list = List(24)list match {case first :: second :: rest => println(s"first: $first, second: $second, rest: $rest")case _ => println("something else")}println("===========================")// 5. 匹配元组for (tuple <- List((0, 1),(0, 0),(0, 1, 0),(0, 1, 1),(1, 23, 56),("hello", true, 0.5))){val result = tuple match {case (a, b) => "" + a + ", " + bcase (0, _) => "(0, _)"case (a, 1, _) => "(a, 1, _) " + acase (x, y, z) => "(x, y, z) " + x + " " + y + " " + zcase _ => "something else"}println(result)}}
}

8.3 模式匹配3

package chapter08object Test03_MatchTupleExtend {def main(args: Array[String]): Unit = {// 1. 在变量声明时匹配val (x, y) = (10, "hello")println(s"x: $x, y: $y")val List(first, second, _*) = List(23, 15, 9, 78)println(s"first: $first, second: $second")val fir :: sec :: rest = List(23, 15 , 9, 78)println(s"first: $fir, second: $sec, rest: $rest")println("=====================")// 2. for推导式中进行模式匹配val list: List[(String, Int)] = List(("a", 12), ("b", 35), ("c", 27), ("a", 13))// 2.1 原本的遍历方式for (elem <- list){println(elem._1 + " " + elem._2)}// 2.2 将List的元素直接定义为元组,对变量赋值for ((word, count) <- list ){println(word + ": " + count)}println("-----------------------")// 2.3 可以不考虑某个位置的变量,只遍历key或者valuefor ((word, _) <- list)println(word)println("-----------------------")// 2.4 可以指定某个位置的值必须是多少for (("a", count) <- list){println(count)}}
}

8.4 模式匹配4

package chapter08object Test04_MatchObject {def main(args: Array[String]): Unit = {val student = new Student("alice", 19)// 针对对象实例的内容进行匹配val result = student match {case Student("alice", 18) => "Alice, 18"case _ => "Else"}println(result)}
}// 定义类
class Student(val name: String, val age: Int)// 定义伴生对象
object Student {def apply(name: String, age: Int): Student = new Student(name, age)// 必须实现一个unapply方法,用来对对象属性进行拆解def unapply(student: Student): Option[(String, Int)] = {if (student == null){None} else {Some((student.name, student.age))}}
}

8.5 模式匹配5

package chapter08object Test05_MatchCaseClass {def main(args: Array[String]): Unit = {val student = Student1("alice", 18)// 针对对象实例的内容进行匹配val result = student match {case Student1("alice", 18) => "Alice, 18"case _ => "Else"}println(result)}
}// 定义样例类
case class Student1(name: String, age: Int)

8.6 模式匹配6

package chapter08object Test06_PartialFunction {def main(args: Array[String]): Unit = {val list: List[(String, Int)] = List(("a", 12), ("b", 35), ("c", 27), ("a", 13))// 1. map转换,实现key不变,value2倍val newList = list.map( tuple => (tuple._1, tuple._2 * 2) )// 2. 用模式匹配对元组元素赋值,实现功能val newList2 = list.map(tuple => {tuple match {case (word, count) => (word, count * 2)}})// 3. 省略lambda表达式的写法,进行简化val newList3 = list.map {case (word, count) => (word, count * 2)}println(newList)println(newList2)println(newList3)// 偏函数的应用,求绝对值// 对输入数据分为不同的情形:正、负、0val positiveAbs: PartialFunction[Int, Int] = {case x if x > 0 => x}val negativeAbs: PartialFunction[Int, Int] = {case x if x < 0 => -x}val zeroAbs: PartialFunction[Int, Int] = {case 0 => 0}def abs(x: Int): Int = (positiveAbs orElse negativeAbs orElse zeroAbs) (x)println(abs(-67))println(abs(35))println(abs(0))}
}

第 9 章 异常与泛型

9.1 异常

package chapter09plusobject Test01_Exception {def main(args: Array[String]): Unit = {try{val n = 10 / 0} catch {case e: ArithmeticException => {println("发生算术异常")}case e: Exception => {println("发生一般异常")}} finally {println("处理结束")}}
}

9.2 泛型 1

package chapter09plusobject Test02_Implicit {def main(args: Array[String]): Unit = {val new12 = new MyRichInt(12)println(new12.myMax(15))// 1. 隐式函数implicit def convert(num: Int): MyRichInt = new MyRichInt(num)println(12.myMax(15))println("============================")// 2. 隐式类implicit class MyRichInt2(val self: Int) {// 自定义比较大小的方法def myMax2(n: Int): Int = if ( n < self ) self else ndef myMin2(n: Int): Int = if ( n < self ) n else self}println(12.myMin2(15))println("============================")// 3. 隐式参数implicit val str: String = "alice"
//    implicit val str2: String = "alice2"implicit val num: Int = 18def sayHello()(implicit name: String): Unit = {println("hello, " + name)}def sayHi(implicit name: String = "atguigu"): Unit = {println("hi, " + name)}sayHellosayHi// 简便写法def hiAge(): Unit = {println("hi, " + implicitly[Int])}hiAge()}
}// 自定义类
class MyRichInt(val self: Int) {// 自定义比较大小的方法def myMax(n: Int): Int = if ( n < self ) self else ndef myMin(n: Int): Int = if ( n < self ) n else self
}

9.3 泛型 2

package chapter09plusobject Test03_Generics {def main(args: Array[String]): Unit = {// 1. 协变和逆变val child: Parent = new Child
//    val childList: MyCollection[Parent] = new MyCollection[Child]val childList: MyCollection[SubChild] = new MyCollection[Child]// 2. 上下限def test[A <: Child](a: A): Unit = {println(a.getClass.getName)}test[SubChild](new SubChild)}
}// 定义继承关系
class Parent {}
class Child extends Parent {}
class SubChild extends Child {}// 定义带泛型的集合类型
class MyCollection[-E] {}

相关文章:

240520Scala笔记

240520Scala笔记 第 7 章 集合 7.1 集合1 数组Array 集合(Test01_ImmutableArray): package chapter07 ​ object Test01_ImmutableArray {def main(args: Array[String]): Unit {// 1. 创建数组val arr: Array[Int] new Array[Int](5)// 另一种创建方式val arr2 Array(…...

【React】封装一个好用方便的消息框(Hooks Bootstrap 实践)

引言 以 Bootstrap 为例&#xff0c;使用模态框编写一个简单的消息框&#xff1a; import { useState } from "react"; import { Modal } from "react-bootstrap"; import Button from "react-bootstrap/Button"; import bootstrap/dist/css/b…...

tomcat10部署踩坑记录-公网IP和服务器系统IP搞混

1. 服务器基本条件 使用的阿里云服务器&#xff0c;镜像系统是Ubuntu16.04java version “17.0.11” 2024-04-16 LTS装的是tomcat10.1.24阿里云服务器安全组放行了&#xff1a;8080端口 服务器防火墙关闭&#xff1a; 监听情况和下图一样&#xff1a; tomcat正常启动&#xff…...

探索Sass:Web开发的强大工具

在现代Web开发中,CSS(层叠样式表)作为前端样式设计的核心技术,已经发展得非常成熟。然而,随着Web应用的复杂性不断增加,传统的CSS书写方式逐渐暴露出一些不足之处,如代码冗长、难以维护、缺乏编程功能等。为了解决这些问题,Sass(Syntactically Awesome Stylesheets)应…...

vue组件之间的通信方式有哪些

在开发过程中&#xff0c;数据传输是一个核心的知识点&#xff0c;掌握了数据传输&#xff0c;相当于掌握了80%的内容。 Vue.js 提供了多种组件间的通信方式&#xff0c;这些方式适应不同的场景和需求。下面是4种常见的通信方式&#xff1a; 1. Props & Events (父子组件通…...

111、二叉树的最小深度

给定一个二叉树&#xff0c;找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 题解&#xff1a;找出最小深度也就是找出根节点相对所有叶子结点的最小高度&#xff0c;在这也表明了根节点的高度是变化的&#xff0c;相对不同的叶子结点有不同的高度。…...

SpringBoot3依赖管理,自动配置

文章目录 1. 项目新建2. 相关pom依赖3. 依赖管理机制导入 starter 所有相关依赖都会导入进来为什么版本号都不用写&#xff1f;如何自定义版本号第三方的jar包 4. 自动配置机制5. 核心注解 1. 项目新建 直接建Maven项目通过官方提供的Spring Initializr项目创建 2. 相关pom依…...

音视频开发17 FFmpeg 音频解码- 将 aac 解码成 pcm

这一节&#xff0c;接 音视频开发12 FFmpeg 解复用详情分析&#xff0c;前面我们已经对一个 MP4文件&#xff0c;或者 FLV文件&#xff0c;或者TS文件进行了 解复用&#xff0c;解出来的 视频是H264,音频是AAC&#xff0c;那么接下来就要对H264和AAC进行处理&#xff0c;这一节…...

vue2中封装图片上传获取方法类(针对后端返回的数据不是图片链接,只是图片编号)

在Vue 2中实现商品列表中带有图片编号&#xff0c;并将返回的图片插入到商品列表中&#xff0c;可以通过以下步骤完成&#xff1a; 在Vue组件的data函数中定义商品列表和图片URL数组。 创建一个方法来获取每个商品的图片URL。 使用v-for指令在模板中遍历商品列表&#xff0c;并…...

【C++面向对象编程】(二)this指针和静态成员

文章目录 this指针和静态成员this指针静态成员 this指针和静态成员 this指针 C中类的成员变量和成员函数的存储方式有所不同&#xff1a; 成员变量&#xff1a;对象的成员变量直接作为对象的一部分存储在内存中。成员函数&#xff1a;成员函数&#xff08;非静态成员函数&am…...

最大矩形问题

柱状图中最大的矩形 题目 分析 矩形的面积等于宽乘以高&#xff0c;因此只要能确定每个矩形的宽和高&#xff0c;就能计算它的面积。如果直方图中一个矩形从下标为 i 的柱子开始&#xff0c;到下标为 j 的柱子结束&#xff0c;那么这两根柱子之间的矩形&#xff08;含两端的柱…...

LeetCode62不同路径

题目描述 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。问总共有多少条不同的路径&#xff1f; …...

GNU Radio实现OFDM Radar

文章目录 前言一、GNU Radio Radar Toolbox编译及安装二、ofdm radar 原理讲解三、GNU Radio 实现 OFDM Radar1、官方提供的 grc①、grc 图②、运行结果 2、修改后的便于后续可实现探测和通信的 grc①、grc 图②、运行结果 四、资源自取 前言 本文使用 GNU Radio 搭建 OFDM Ra…...

东方博宜1760 - 整理抽屉

题目描述 期末考试即将来临&#xff0c;小T由于同时肩负了学习、竞赛、班团活动等多方面的任务&#xff0c;一直没有时间好好整理他的课桌抽屉&#xff0c;为了更好地复习&#xff0c;小T首先要把课桌抽屉里的书分类整理好。 小T的抽屉里堆着 N 本书&#xff0c;每本书的封面上…...

react快速开始(四)-之Vite 还是 (Create React App) CRA? 用Vite创建项目

文章目录 react快速开始(四)-之Vite 还是 (Create React App) CRA? 用Vite创建项目背景Vite 和 (Create React App) CRAVite&#xff1f;Vite 是否支持 TypeScript&#xff1f; 用Vite创建react项目参考 react快速开始(四)-之Vite 还是 (Create React App) CRA? 用Vite创建项…...

使用python绘制核密度估计图

使用python绘制核密度估计图 核密度估计图介绍效果代码 核密度估计图介绍 核密度估计&#xff08;Kernel Density Estimation&#xff0c;KDE&#xff09;是一种用于估计数据概率密度函数的非参数方法。与直方图不同&#xff0c;KDE 可以生成平滑的密度曲线&#xff0c;更好地…...

5. MySQL 运算符和函数

文章目录 【 1. 算术运算符 】【 2. 逻辑运算符 】2.1 逻辑非 (NOT 或者 !)2.2 逻辑与运算符 (AND 或者 &&)2.3 逻辑或 (OR 或者 ||)2.4 异或运算 (XOR) 【 3. 比较运算符 】3.1 等于 3.2 安全等于运算符 <>3.3 不等于运算符 (<> 或者 !)3.4 小于等于运算符…...

Linux学习之vi文本编辑器的使用

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…...

【数据结构】链表与顺序表的比较

不同点&#xff1a; 顺序表和链表是两种常见的数据结构&#xff0c;他们的不同点在于存储方式和插入、删除操作、随机访问、cpu缓存利用率等方面。 一、存储方式不同: 顺序表&#xff1a; 顺序表的存储方式是顺序存储&#xff0c;在内存中申请一块连续的空间&#xff0c;通…...

dart 基本语法

//入口方法 main() 或 void main() //数据类型 原生数据类型 String int double bool null 注意&#xff1a;String 包函 ‘’ “” ‘’’ ‘’’ 三种形式复杂数据类型 list Set Map自定义数据类型 class inheritance动态数据类型 var 注&#xff1a;dart 是静态类型语言&a…...

【经验分享】嵌入式入坑经历(选段)

文章目录 你现在的工作中所用到的专业知识有哪些呢&#xff1f;为什么想转行了&#xff1f;后来为什么从事了嵌入式行业呢?你对嵌入式的兴趣是何时培养起来的?你是怎么平衡兴趣爱好和工作的关系的?平时做的事情对你现在的工作有哪些帮助?对于有志学习嵌入式开发的在校大学生…...

Docker面试整理-Docker与虚拟机的区别是什么?

Docker 容器和传统的虚拟机(VM)都是提供隔离的运行环境以部署和运行应用程序的技术,但它们在架构和性能上存在显著的不同。了解这些差异可以帮助你选择最适合特定需求的解决方案: 基础架构:虚拟机:每个虚拟机都包括完整的操作系统、应用程序、必需的库和二进制文件,运行在…...

Java:JDK8 GC中ParNew和CMS的问题说明

JDK8中常用如下的垃圾收集器&#xff0c;它们分别运用在年轻代和老年代&#xff1a; ParNew : 年轻代垃圾收集器&#xff0c;多线程&#xff0c;采用标记—复制算法。 CMS&#xff1a;老年代的收集器&#xff0c;全称&#xff08;Concurrent Mark and Sweep&#xff09;&#…...

学单片机前先学什么?

先学c语言和数字电路 这里默认你说的单片机是51单片机&#xff0c;通过你的问题&#xff0c;我猜你的单片机应该还没有入门&#xff0c;如果是入门的话&#xff0c;一般都是从51单片机开始的。刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「单片机的资料从…...

数据可视化:Matplotlib 与 Seaborn

数据可视化是数据分析中至关重要的一部分&#xff0c;它能帮助我们直观地理解数据的分布、趋势和关系。Python 中&#xff0c;Matplotlib 和 Seaborn 是两个最常用的可视化库。本文将详细介绍如何使用 Matplotlib 和 Seaborn 进行数据可视化&#xff0c;包括基本图形、图形定制…...

【linux】自定义快捷命令/脚本

linux自定义快捷命令 场景自定义命令自定义脚本 场景 深度学习经常要切换到自己环境&#xff0c;conda activate mmagic&#xff0c;但是又不想每次重复打这么多字&#xff0c;想使用快捷命令直接切换。 自定义命令 使用别名&#xff08;alias&#xff09;或自定义脚本来创建…...

使用onnxruntime加载YOLOv8生成的onnx文件进行目标检测

在网上下载了60多幅包含西瓜和冬瓜的图像组成melon数据集&#xff0c;使用 LabelMe 工具进行标注&#xff0c;然后使用 labelme2yolov8 脚本将json文件转换成YOLOv8支持的.txt文件&#xff0c;并自动生成YOLOv8支持的目录结构&#xff0c;包括melon.yaml文件&#xff0c;其内容…...

QT 信号和槽 一对多关联示例,一个信号,多个槽函数响应,一个信号源如何绑定多个槽函数

在窗体里放置一个单行文本编辑控件&#xff08;QLineEdit&#xff09;、一个标签控件&#xff08;QLabel&#xff09;和一个文本浏览控件&#xff08;QTextBrowser&#xff09;&#xff0c;在单行文 本编辑控件里的文本被编辑时&#xff0c;标签控件和文本浏览控件都会同步显示…...

C++ AVL树 详细讲解

目录 一、AVL树的概念 二、AVL树的实现 1.AVL树节点的定义 2.AVL树的插入 3.AVL树的旋转 4.AVL树的验证 三、AVL树的性能 四、完结撒❀ 一、AVL树的概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但 如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查 …...

Faster R-CNN:端到端的目标检测网络

本文回顾了由微软研究人员开发的 Faster R-CNN 模型。Faster R-CNN 是一种用于物体检测的深度卷积网络&#xff0c;在用户看来&#xff0c;它是一个单一的、端到端的统一网络。该网络可以准确快速地预测不同物体的位置。为了真正理解 Faster R-CNN&#xff0c;我们还必须快速概…...