欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報邀請碼778899分享:Scala簡介

柚子快報邀請碼778899分享:Scala簡介

http://yzkb.51969.com/

目錄一,初識Scala?二,Scala基礎知識三,面向?qū)ο缶幊袒A四,函數(shù)式編程基礎 一,初識Scala spark作為一個非常流行普及的分布式計算框架,支持Scala,Java,Python,R語言開發(fā)應用程序。spark本身就是Scala語言開發(fā)的,Scala語言自然就是我們學習Spark的首選語言。1.Scala運行于JVM之上,兼容大多數(shù)Java程序。2.Scala既是一門面向?qū)ο蟮木幊陶Z言也一門函數(shù)式的編程語言。3.Scala解釋器REPL(read,eval,print,loop的縮寫)。4.spark自帶REPL解釋器,spark配置好后,直接鍵入scala就可以進入scala解釋器進行scala語言的學習,以下是spark的環(huán)境變量配置項。#SPARKexport SPARK_HOME=/home/TG/software/spark/spark-3.1.3-bin-without-hadoopexport PATH=${SPARK_HOME}/bin:$PATHexport PATH=${SPARK_HOME}/sbin:$PATH5.scala解釋器中一次只能運行一行的運行Scala程序,要想依次運行多行程序得在本地編輯一個Scala文件。源代碼:運行:1)直接用Scala接源代碼文件名?2)在REPL中:先裝載,:load接文件名?再用對象調(diào)用屬性:?3)用scalac注意scala -classpath . HelloWorld中的.與HelloWorld之間有空格?6.Scala語言大小寫敏感,用;(英文的分號)作為語句的結(jié)束符且(;)可以省略。 ?二,Scala基礎知識 1.九種基本數(shù)據(jù)類型+Unit類型Byte,Short,Int,Long,Char,String,Float,Double,Boolean(true,false兩種取值),Unit作為沒有返回值的的函數(shù)類型。2.Scala只有val(不可變)和var(可變)兩類型變量變量聲明:1)val 變量名:數(shù)據(jù)類型 = 初始值2)var 變量名:數(shù)據(jù)類型 = 初始值3.REPL自帶類型推斷機制,可以不用聲明變量的類型,可以根據(jù)初始值來判斷變量的類型?4.Scala操作符的優(yōu)先級算數(shù)運算符 >關系運算符>邏輯運算符>賦值運算符(!(邏輯非運算符)比算術(shù)運算符優(yōu)先級高,建議盡量用括號去厘清操作符的優(yōu)先級。5.輸入/輸出1)控制臺輸入import scala.io.StdIn._readInt(),readShort(),readLong(),readDouble(),readFloat(),readLine(),readBoolean()?2)控制臺輸出print()println()輸出結(jié)束時默認加一個換行符printf()帶格式化字符串輸出Scala自帶字符串插值機制,s/f,$用于插值,f支持帶格式化參數(shù)3)文本文件的創(chuàng)建和寫入import java.io.PrintWriter,用print和println方法向文本文件寫入內(nèi)容?4)文件讀取import scala.io.Source? 用getLines方法返回一個包含所有行的迭代器?6.控制結(jié)構(gòu)?1)if條件表達式Scala中if條件表達式會返回一個值,可以將這個值賦值給一個變量?2) while循環(huán)3)for循環(huán)表達式for循環(huán)每次執(zhí)行的時候都可以產(chǎn)生一個值,然后將包含所有產(chǎn)生值的容器對象返作為for循環(huán)表達式的值返回。?4)異常處理結(jié)構(gòu)scala僅支持運行時異常,try{}catch{}finally{},finally{}語句塊是可選的。finally語句塊無論是否發(fā)生異常都會執(zhí)行 。5)對循環(huán)的控制,Scala用breakable和break實現(xiàn)對循環(huán)的控制import util.control.Breaks._breakable{...if(...)break...}即從break跳到breakable?7.數(shù)據(jù)結(jié)構(gòu)scala編程中經(jīng)常需要用到各種數(shù)據(jù)結(jié)構(gòu),比如數(shù)組(Array),元組(Tuple),列表(List),映射(Map),集合(Set)等。1)數(shù)組(Array)是一種可變的,可索引的,元素具有相同類型的數(shù)據(jù)集合,這是最常用的數(shù)據(jù)結(jié)構(gòu)。注意:1.Scala數(shù)組的索引是從零開始的,且最后一個元素的索引為數(shù)組長度n-1。2.scala的數(shù)組使用圓括號來訪問數(shù)組。?定義多維數(shù)組,通過ofDim方法定義多維數(shù)組2)元組(Tuple)在Scala中,元組(Tuple)是一種用于存儲固定數(shù)量的不同類型的元素的數(shù)據(jù)結(jié)構(gòu)。元組可以包含從1個到22個元素,每個元素的類型可以不同。元組中的元素可以使用點號 . 和索引訪問。注意:Tuple的索引從1開始,Array的索引從0開始,Tuple的元素可是不同類型,Array的元素只能同種類型。??3)列表(List)在scala中,列表(List)是一種常用的容器類型,用于存儲有序的元素序列。列表是不可變的,意味著它的內(nèi)容在創(chuàng)建后不可更改。注意:列表索引從零開始,列表元素可以重復,列表元素可以是不同數(shù)據(jù)類型。scala> //創(chuàng)建列表scala> val list = List("scala",0,3.14,true,false,'a')list: List[Any] = List(scala, 0, 3.14, true, false, a)scala> //訪問列表元素scala> list(0)res0: Any = scalascala> list(5)res1: Any = ascala> //連接列表scala> val list1 = List(1,2,3)list1: List[Int] = List(1, 2, 3)scala> val list2 = List(4,5,6)list2: List[Int] = List(4, 5, 6)scala> val list3 = list1 ++ list2list3: List[Int] = List(1, 2, 3, 4, 5, 6)scala> //添加列表元素scala> val Numlist = List(1,2,3)Numlist: List[Int] = List(1, 2, 3)scala> val updatedlist = 0::Numlistupdatedlist: List[Int] = List(0, 1, 2, 3)scala> val intlist = 1::2::3::Nilintlist: List[Int] = List(1, 2, 3)scala> //過濾元素scala> val numlist = List(1,2,3,4)numlist: List[Int] = List(1, 2, 3, 4)scala> val evenList = numlist.filter(_%2 == 0)evenList: List[Int] = List(2, 4)scala> //轉(zhuǎn)換元素scala> val numlist = List(1,2,3,4,5)numlist: List[Int] = List(1, 2, 3, 4, 5)scala> val doubledList = numlist.map(_*2)doubledList: List[Int] = List(2, 4, 6, 8, 10)scala> //檢查元素是否存在scala> val fruitsList = List("apple","banana","orange")fruitsList: List[String] = List(apple, banana, orange)scala> val hasApple:Boolean = fruitsList.contains("Apple")hasApple: Boolean = falsescala> val hasapple:Boolean = fruitsList.contains("apple")hasapple: Boolean = truescala> //head和tailscala> fruitsList.headres2: String = applescala> fruitsList.tailres3: List[String] = List(banana, orange)?注意:Nil為空列表對象,::向右結(jié)合,由于列表采用鏈表結(jié)構(gòu),因此,除了head和tail以及其他的操作的時間復雜度為O(1),其他時間復雜度為O(n).4)Range類// 使用 to 方法創(chuàng)建 Rangeval range1 = 1 to 5// 輸出: Range(1, 2, 3, 4, 5)// 使用 until 方法創(chuàng)建 Rangeval range2 = 0 until 10 by 2// 輸出: Range(0, 2, 4, 6, 8)// 使用 by 方法創(chuàng)建 Rangeval range3 = 10 to 1 by -1// 輸出: Range(10, 9, 8, 7, 6, 5, 4, 3, 2, 1)// 檢查 Range 是否為空val emptyRange = 1 to 0val nonEmptyRange = 1 to 5println(emptyRange.isEmpty) ?// 輸出: trueprintln(nonEmptyRange.isEmpty) ?// 輸出: false// 檢查 Range 是否包含特定值println(range1.contains(3)) ?// 輸出: trueprintln(range1.contains(6)) ?// 輸出: false// 獲取 Range 的長度println(range1.length) ?// 輸出: 5// 遍歷 Range 中的每個元素range2.foreach(println)// 輸出:// 0// 2// 4// 6// 8// 對 Range 中的每個元素執(zhí)行函數(shù)并返回新的 Rangeval doubledRange = range1.map(_ * 2)// 輸出: Range(2, 4, 6, 8, 10)// 根據(jù)條件過濾 Range 中的元素并返回新的 Rangeval evenRange = range1.filter(_ % 2 == 0)// 輸出: Range(2, 4)// 將 Range 轉(zhuǎn)換為 Listval rangeList = range1.toList// 輸出: List(1, 2, 3, 4, 5)// 計算 Range 中所有元素的總和val sum = range1.sum// 輸出: 155)集合(Set)scala的集合(Set)是不重復元素的容器,分為可變集合和不可變集合兩種。scala> var myset = Set("hadoop","spark")myset: scala.collection.immutable.Set[String] = Set(hadoop, spark)scala> myset += "scala"scala> import scala.collection.mutable.Setimport scala.collection.mutable.Setscala> val myMutableSet = Set("Database","BigData")myMutableSet: scala.collection.mutable.Set[String] = Set(BigData, Database)scala> myMutableSet+="Cloud"res12: myMutableSet.type = Set(BigData, Cloud, Database)scala> myset.foreach(println)hadoopsparkscala5)映射(Map)Scala 的 Map 是一種鍵值對(Key-Value)的集合,用于存儲和操作鍵值對數(shù)據(jù)。Map 分為不可變的和可變的,默認是不可變的Map,可以通過創(chuàng)建新的 Map 來添加、更新或刪除鍵值對。以下是 Scala Map 的詳細介紹:1. 創(chuàng)建 Map:? ?- 使用 `->` 運算符創(chuàng)建鍵值對:? ?val map1: Map[String, Int] = Map("apple" -> 1, "banana" -> 2, "orange" -> 3) ?? ?- 使用元組列表創(chuàng)建 Map:? ?val map2: Map[String, Int] = Map(("apple", 1), ("banana", 2), ("orange", 3))??2. 訪問和操作 Map:? ?- 通過鍵獲取值:? ?val value1 = map1("apple") ?// 獲取鍵 "apple" 對應的值? - 檢查鍵是否存在:? ?val containsKey = map1.contains("banana") ?// 檢查是否包含鍵 "banana" ?? ?- 獲取所有鍵或值的集合:? ?val keys = map1.keys ?// 獲取所有鍵的集合? ?val values = map1.values ?// 獲取所有值的集合 ?? ?- 添加或更新鍵值對:? ?? ?val updatedMap = map1 + ("grape" -> 4) ?// 添加新的鍵值對? ?val updatedMap2 = map1.updated("apple", 5) ?// 更新鍵 "apple" 對應的值 ?? ?- 刪除鍵值對:?? ?val removedMap = map1 - "orange" ?// 刪除鍵為 "orange" 的鍵值對 ?3. 遍歷 Map:? ?- 遍歷所有鍵值對:? ?map1.foreach { case (key, value) =>? ? ?println(s"Key: $key, Value: $value")? ?}?- 遍歷所有鍵:? ?map1.keys.foreach { key =>? ? ?println(s"Key: $key")? ?}? ?- 遍歷所有值:? ?? ?map1.values.foreach { value =>? ? ?println(s"Value: $value")? ?} ?4. Map 特性:??? ?- 鍵的唯一性:Map 中的鍵是唯一的,每個鍵只能對應一個值。? ?- 無序性:Map 中的鍵值對沒有固定的順序。Scala 的 Map 提供了一種方便和高效的方式來存儲和操作鍵值對數(shù)據(jù)。它適用于各種場景,例如配置信息、緩存數(shù)據(jù)、數(shù)據(jù)映射等。利用 Map 的豐富操作方法,可以高效地進行鍵值對的查找、更新和遍歷操作。6)迭代器(Iterator)Scala 的 Iterator 是一種用于遍歷集合元素的抽象接口。Iterator 提供了一種惰性的方式來逐個訪問集合中的元素,而不需要提前加載或生成整個集合。這種惰性求值的方式使得 Iterator 在處理大型集合時非常高效,并且占用的內(nèi)存較少。下面是 Scala Iterator 的詳細介紹:1. 創(chuàng)建 Iterator:? ?- 通過集合的 `iterator` 方法創(chuàng)建 Iterator:? ?```scala? ?val list = List(1, 2, 3, 4, 5)? ?val iterator = list.iterator? ?```? ?- 通過調(diào)用 `fromIterator` 方法將集合轉(zhuǎn)換為 Iterator:? ?```scala? ?val iterator = Iterator.fromIterator(list.iterator)? ?```2. Iterator 的操作方法:? ?- `next()`:返回迭代器中的下一個元素,并將迭代器位置移動到下一個元素。? ?- `hasNext()`:檢查迭代器中是否還有下一個元素。? ?- `foreach(function: A => Unit)`:對迭代器中的每個元素應用給定的函數(shù)。? ?- `filter(predicate: A => Boolean)`:根據(jù)給定的條件謂詞過濾迭代器中的元素。? ?- `map[B](function: A => B)`:對迭代器中的每個元素應用給定的函數(shù),并返回結(jié)果的新迭代器。? ?- `toList`:將迭代器轉(zhuǎn)換為一個 List。? ?- `toSet`:將迭代器轉(zhuǎn)換為一個 Set。3. 遍歷 Iterator:? ?- 使用 `while` 循環(huán)遍歷 Iterator:? ?```scala? ?while (iterator.hasNext) {? ? ?val element = iterator.next()? ? ?// 處理元素? ?}? ?```? ?- 使用 `foreach` 方法遍歷 Iterator:? ?```scala? ?iterator.foreach { element =>? ? ?// 處理元素? ?}? ?```? ?- 使用 `toList` 方法將 Iterator 轉(zhuǎn)換為 List,并進行進一步的處理:? ?```scala? ?val list = iterator.toList? ?// 對 List 進行處理? ?```4. Iterator 的特性:? ?- 惰性求值:Iterator 采用惰性求值的方式,只在需要時才生成下一個元素,這樣可以在處理大型集合時節(jié)省內(nèi)存。? ?- 只能單向遍歷:Iterator 只能向前遍歷集合,不支持反向遍歷或跳躍遍歷。? ?- 只能遍歷一次:Iterator 是一次性的,一旦遍歷完成,就無法再次使用。Scala 的 Iterator 提供了一種高效和低內(nèi)存消耗的方式來遍歷集合元素。它適用于需要逐個訪問集合元素并且不需要提前加載整個集合的場景。通過使用 Iterator 的操作方法和遍歷方式,可以對集合元素進行過濾、映射和其他常見的操作。當涉及到使用 Scala 的 Iterator 時,以下是一些常見的應用示例:1. 過濾元素:```scalaval list = List(1, 2, 3, 4, 5)val evenNumbersIterator = list.iterator.filter(_ % 2 == 0)while (evenNumbersIterator.hasNext) {? val element = evenNumbersIterator.next()? println(element)}```在此示例中,我們使用 `filter` 方法創(chuàng)建了一個只包含偶數(shù)的迭代器,并通過遍歷迭代器打印出所有偶數(shù)。2. 轉(zhuǎn)換元素:```scalaval list = List(1, 2, 3, 4, 5)val squaredNumbersIterator = list.iterator.map(n => n * n)squaredNumbersIterator.foreach { element =>? println(element)}```在這個示例中,我們使用 `map` 方法創(chuàng)建了一個迭代器,其中每個元素都是原始列表中元素的平方。然后,我們使用 `foreach` 方法遍歷迭代器并打印出平方后的數(shù)字。3. 扁平化操作:```scalaval nestedList = List(List(1, 2, 3), List(4, 5, 6), List(7, 8, 9))val flattenedIterator = nestedList.iterator.flattenwhile (flattenedIterator.hasNext) {? val element = flattenedIterator.next()? println(element)}```在這個示例中,我們有一個嵌套列表,我們使用 `flatten` 方法將其扁平化為一個迭代器。然后,我們遍歷迭代器并打印出扁平化后的元素。4. 自定義迭代器:```scalaclass CountingIterator(start: Int, end: Int) extends Iterator[Int] {? private var current = start? override def hasNext: Boolean = current <= end? override def next(): Int = {? ? val result = current? ? current += 1? ? result? }}val countingIterator = new CountingIterator(1, 5)countingIterator.foreach(println)```在此示例中,我們自定義了一個 `CountingIterator` 類,它擴展了 `Iterator[Int]` 特質(zhì),并實現(xiàn)了 `hasNext` 和 `next` 方法。該迭代器用于生成從 `start` 到 `end` 范圍內(nèi)的連續(xù)整數(shù)。然后,我們創(chuàng)建一個實例并使用 `foreach` 方法遍歷迭代器并打印出生成的數(shù)字。這些示例展示了使用 Scala 的 Iterator 進行過濾、轉(zhuǎn)換、扁平化等常見操作的應用場景。通過使用迭代器,我們可以逐個訪問集合的元素,實現(xiàn)對數(shù)據(jù)的逐個處理,從而提供更高效的內(nèi)存利用和懶加載的特性。 三,面向?qū)ο缶幊袒A 當涉及到Scala的面向?qū)ο缶幊虝r,下面是更詳細的討論:1. 類和對象:? ?- 類是對象的模板,它定義了對象的屬性和方法??梢允褂胉class`關鍵字定義類。? ?- 對象是類的實例,通過使用`new`關鍵字和類的構(gòu)造函數(shù)創(chuàng)建。對象可以調(diào)用類的方法和訪問類的屬性。? ?```scala? ?class Person {? ? ?var name: String = ""? ? ?def sayHello(): Unit = {? ? ? ?println(s"Hello, my name is $name.")? ? ?}? ?}? ?val person = new Person()? ?person.name = "John"? ?person.sayHello// 輸出: Hello, my name is John.? ?```2. 屬性和方法:? ?- 類的屬性用于存儲對象的狀態(tài)??梢允褂胉var`關鍵字定義可變屬性,使用`val`關鍵字定義不可變屬性。? ?- 方法定義了對象的行為。方法可以讀取和修改屬性,也可以執(zhí)行其他操作。? ?```scala? ?class Circle {? ? ?val radius: Double = 1.0? ? ?def area(): Double = {? ? ? ?Math.PI * radius * radius? ? ?}? ?}? ?val circle = new Circle()? ?println(circle.area()) // 輸出: 3.141592653589793? ?```3. 繼承:? ?- 繼承允許創(chuàng)建一個類來擴展另一個類的屬性和方法。使用`extends`關鍵字指定要繼承的父類。? ?- 子類可以繼承父類的屬性和方法,并且可以添加自己的新屬性和方法??梢允褂胉override`關鍵字重寫父類的方法。? ?```scala? ?class Animal {? ? ?def makeSound(): Unit = {? ? ? ?println("The animal makes a sound.")? ? ?}? ?}? ?class Dog extends Animal {? ? ?override def makeSound(): Unit = {? ? ? ?println("The dog barks.")? ? ?}? ?}? ?val dog = new Dog()? ?dog.makeSound() // 輸出: The dog barks.? ?```4. 多態(tài):? ?- 多態(tài)允許使用基類類型的引用來引用子類的對象,從而以統(tǒng)一的方式處理不同類型的對象。? ?- 可以使用父類類型的變量引用子類對象,然后根據(jù)實際對象的類型調(diào)用相應的方法。? ?```scala? ?class Shape {? ? ?def area(): Double = 0.0? ?}? ?class Rectangle(width: Double, height: Double) extends Shape {? ? ?override def area(): Double = width * height? ?}? ?class Circle(radius: Double) extends Shape {? ? ?override def area(): Double = Math.PI * radius * radius? ?}? ?val shapes: Array[Shape] = Array(new Rectangle(2.0, 3.0), new Circle(1.0))? ?for (shape <- shapes) {? ? ?println(shape.area())? ?}? ?// 輸出:? ?// 6.0? ?// 3.141592653589793? ?```5. 封裝:? ?- 封裝是將數(shù)據(jù)和方法組合在一個單元內(nèi),以防止對數(shù)據(jù)的直接訪問。? ?- 可以使用訪問修飾符來限制對類的成員的訪問權(quán)限。`private`修飾的成員只能在類內(nèi)部訪問,`protected`修飾的成員可以在類內(nèi)部和子類中訪問。? ?```scala? ?class Person {? ? ?private var age: Int = 0? ? ?def getAge(): Int = age? ? ?def setAge(newAge: Int): Unit = {? ? ? ?if (newAge >= 0) {? ? ? ? ?age = newAge? ? ? ?}? ? ?}? ?}? ?val person = new Person()? ?person.setAge(25)? ?println(person.getAge()) // 輸出: 25? ?person.age = -10 // 錯誤,age是私有的,無法直接訪問? ?```6. 抽象類和特質(zhì):? ?- 抽象類是不能實例化的類,它可以包含抽象方法和非抽象方法。抽象方法沒有實現(xiàn),需要在子類中重寫。? ?- 特質(zhì)是一組方法簽名的集合,它可以由類實現(xiàn)。特質(zhì)中的方法默認是抽象的,不需要使用`abstract`關鍵字??梢允褂脀ith關鍵字混入多個特質(zhì),用extends繼承一超類。? ?```scala? ?abstract class Shape {? ? ?def area(): Double // 抽象方法? ?}? ?class Circle(radius: Double) extends Shape {? ? ?override def area(): Double = Math.PI * radius * radius? ?}? ?trait?Drawable {? ? ?def draw(): Unit // 抽象方法? ?}? ?class Square extends Drawable {? ? ?override def draw(): Unit = {? ? ? ?println("Drawing a square.")? ? ?}? ?}? ?```8. 單例對象:? ?單例對象是一個類的實例,但只能存在一個實例。? ?單例對象常用于表示全局狀態(tài)、共享資源或提供某些服務。? ?單例對象可以包含靜態(tài)方法和字段,并且在整個應用程序中可以直接訪問。? ?```scala? ?object Config {? ? ?val apiUrl: String = "https://example.com/api"? ? ?def logLevel: String = "INFO"? ?}? ?println(Config.apiUrl) // 輸出: https://example.com/api? ?println(Config.logLevel) // 輸出: INFO? ?```這些是Scala面向?qū)ο缶幊痰幕A概念和語法。Scala還提供了更多高級特性和語法,如模式匹配、樣例類、類型參數(shù)和隱式轉(zhuǎn)換,使得面向?qū)ο缶幊谈鼮閺姶蠛挽`活。 四,函數(shù)式編程基礎 Scala是一門多范式編程語言,既支持面向?qū)ο缶幊蹋∣OP)也支持函數(shù)式編程(FP)。函數(shù)式編程是一種編程范式,它將計算視為數(shù)學函數(shù)的求值,強調(diào)使用不可變數(shù)據(jù)和無副作用的函數(shù)來構(gòu)建程序。以下是對Scala函數(shù)式編程的詳細介紹: 不可變數(shù)據(jù)結(jié)構(gòu): 在函數(shù)式編程中,數(shù)據(jù)是不可變的,這意味著一旦數(shù)據(jù)被創(chuàng)建,就不能再被修改。Scala提供了許多不可變的數(shù)據(jù)結(jié)構(gòu),如List、Set和Map等。不可變數(shù)據(jù)結(jié)構(gòu)可以消除并發(fā)問題,使代碼更易于理解和推理。 高階函數(shù): Scala支持高階函數(shù),即函數(shù)可以作為參數(shù)傳遞給其他函數(shù),或者作為函數(shù)的返回值。高階函數(shù)使得編寫通用、靈活的代碼變得更加容易。常見的高階函數(shù)有map、filter、fold等。 匿名函數(shù): Scala允許使用匿名函數(shù)(也稱為Lambda表達式),它們是沒有名字的一種函數(shù)。匿名函數(shù)可以更簡潔地定義功能,并通常用于高階函數(shù)的參數(shù)傳遞。 不可變函數(shù): 在函數(shù)式編程中,函數(shù)應該是無副作用的,即函數(shù)的執(zhí)行不應該對除了函數(shù)返回值之外的任何內(nèi)容產(chǎn)生影響。不可變函數(shù)更易于測試、推理和并行執(zhí)行。 遞歸: 函數(shù)式編程通常使用遞歸而不是循環(huán)來解決問題。Scala支持尾遞歸優(yōu)化,使遞歸函數(shù)能夠在不產(chǎn)生棧溢出的情況下進行優(yōu)化的尾遞歸調(diào)用。 模式匹配: 在函數(shù)式編程中,模式匹配是一種強大的工具,用于根據(jù)數(shù)據(jù)的結(jié)構(gòu)匹配不同的模式,并執(zhí)行相應的代碼。Scala的match表達式和case語句提供了強大的模式匹配功能。 柯里化: 柯里化是一種將多參數(shù)函數(shù)轉(zhuǎn)換為一系列接受一個參數(shù)的函數(shù)的技術(shù)。Scala支持柯里化,這種技術(shù)可以讓函數(shù)更加靈活和可組合。 不可變性檢查: Scala編譯器會在編譯時檢查不可變性,以確保在使用val關鍵字聲明的不可變變量被正確地處理。 函數(shù)式編程在Scala中具有非常廣泛的應用,它提供了強大的工具和編程模式來編寫簡潔、高效、易于理解和維護的代碼。盡管函數(shù)式編程可以在任何編程范式中應用,但Scala的函數(shù)式特性使其成為函數(shù)式編程的優(yōu)秀選擇。 五,Scala對容器的各種操作 1.遍歷操作foreach用于對容器的遍歷,foreach是一個完全無副作用的方法,它的返回值為Unit類型,它遍歷容器的每個元素,并將接受的函數(shù)參數(shù)應用到每個元素上。//遍歷操作//foreach()方法object Main{?? ?def main(args:Array[String]){?? ??? ?val list = List(1,2,3)?? ??? ?val f=(i:Int)=>println(i)?? ??? ?list.foreach(f)?? ??? ?val university = Map("XMU" -> "Xiamen University","THU" -> "Tsinghua University","PKU"->"Peking University")?? ??? ?university.foreach(kv => println(kv._1+":"+kv._2))?? ??? ?university.foreach{x=>x match {case (k,v) => println(k+":"+v)}}?? ??? ?for((k,v) <- university)println(k+":"+v)?? ?}}?? ??? ? ?2.映射操作映射是指通過對容器中的元素進行某些運算來生成一個新的容器。map和flatMap是常用的映射方法。//映射操作object Main{?? ?def ?main(args:Array[String]){?? ??? ?val books = List("Hadoop","Hive","HDFS")?? ??? ?books.map(s => s.toUpperCase).foreach(x=>println(x))?? ??? ?books.map(s => s.length).foreach(x=>println(x))?? ??? ?books.flatMap(s=>s.toList).foreach(x=>print(x))?? ??? ??? ?}}3.過濾操作過濾是指遍歷一個容器,從中獲得滿足指定條件的元素,返回一個新的容器。常見的過濾操作有filter,filterNot,exists,find//過濾操作object Main{?? ?def ?main(args:Array[String]){?? ??? ?val university = Map("XMU"->"Xiamen University","THU"->"Tsinghua University","PKU"->"Peking University","XMUT"->"Xiamen University of Technology")?? ??? ?val xmus = university.filter(kv => kv._2.contains("Xiamen"))?? ??? ?println(xmus)?? ??? ?val l=List(1,2,3,4,5,6).filter(_%2==0)?? ??? ?println(l)?? ??? ?val xums0 = university.filterNot{kv=>kv._2.contains("Xiamen")}?? ??? ?println(xums0)?? ??? ?val t=List("Spark","Hadoop","Hbase")?? ??? ?println(t.exists(_.startsWith("H")))?? ??? ?t.find(_.startsWith("Hb")).foreach(x=>println(x))?? ??? ?t.find(_.startsWith("Hp")).foreach(x=>println(x))?? ??? ??? ?}}4.規(guī)約操作規(guī)約操作是對容器的元素進行兩兩運算,將其規(guī)約為一個值。常見的規(guī)約操作有reduce,reduceLeft,reduceRight,fold,foldLeft,foldRight5.拆分操作拆分操作是把一個容器里的元素按一定的規(guī)則分割成多個子容器。常用的拆分操作有g(shù)roupedBy,grouped,sliding

柚子快報邀請碼778899分享:Scala簡介

http://yzkb.51969.com/

推薦鏈接

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19108706.html

發(fā)布評論

您暫未設置收款碼

請在主題配置——文章設置里上傳

掃描二維碼手機訪問

文章目錄