SpringBoot專案實現評論功能、分類頁面與標籤頁面
函數語言程式設計
面向物件程式設計
簡潔優雅安全
特性:可擴充套件性,面向物件,函數語言程式設計,Java和Scala無縫操作,靜態型別的語言
型別之間的關係
陣列的各種方法
建立方法一
1 var arr:Array[Int]=new Array[Int](10);
建立方法二
基本操作(運算元組arr) | 描述 |
---|---|
arr.length | 返回陣列的長度 |
arr.head | 檢視陣列第一個元素 |
arr.tail | 檢視陣列除了第一個元素剩下的元素 |
arr.isEmpty | 判斷陣列是否為空 |
arr.last | 檢視陣列最後一個元素 |
arr.init | 除最後一個元素的其他元素 |
arr.contains(x) | 判斷陣列是否包含元素x |
ArrayBuffer
1 import scala.collection.mutable.ArrayBuffer 2 3 //變長陣列ArrayBuffer 4 5 var numArrayBuffer = new ArrayBuffer[ Int] ();
條件判斷
迴圈語句
for迴圈
1 for( var x <- Range 2 if condition1; if condition2... 3 ){statement(s);}
for巢狀迴圈
指定條件迴圈
for (enumerators) yield e
收集值
while迴圈
while(condition)
{
statement(s);
}
集合
list
用法
1 val list1=List(1,2,3,4) 2 val list2=1::2::3::4::Nil
比較 | |
---|---|
xs.startsWith(ys) | 測試序列xs是否以序列ys開頭(存在多種形式)。 |
xs.endsWith(ys) | 測試序列xs是否以序列ys結束(存在多種形式)。 |
xs.contains(x) | 測試xs序列中是否存在一個與x相等的元素。 |
排序 | |
---|---|
xs.sorted |
通過使用xs中元素型別的標準順序,將xs元素進行排序後得到的新序列。 |
加法: | |
---|---|
x +: xs | 由序列xs的前方新增x所得的新序列。 |
xs :+ x | 由序列xs的後方追加x所得的新序列。 |
索引搜尋 | |
---|---|
xs.indexOf(x) | 返回序列xs中等於x的第一個元素的索引 |
xs.lastIndexOf(x) | 返回序列xs中等於x的最後一個元素的索引 |
xs.indexOfSlice(ys) | 查詢子序列ys,返回xs中匹配的第一個索引 |
xs.lastIndexOfSlice(ys) | 查詢子序列ys,返回xs中匹配的倒數一個索引 |
可變列表
ØListBuffer是可變的,因此可以使用可變序列的所有方法從中刪除元素
加法: | |
---|---|
buf += x | 將元素x追加到buffer,並將buf自身作為結果返回。 |
buf += (x, y, z) | 將給定的元素追加到buffer。 |
buf ++= xs | 將xs中的所有元素追加到buffer。 |
x +=: buf | 將元素x新增到buffer的前方。 |
xs ++=: buf | 將xs中的所有元素都新增到buffer的前方。 |
buf.insert (i, x) | 將元素x插入到buffer中索引為i的位置。 |
buf.insertAll (i, xs) | 將xs的所有元素都插入到buffer中索引為i的位置。 |
set集合
ØScala Set(集合)是沒有重複的物件集合,所有的元素都是唯一的。
ØScala 集合分為可變的和不可變的集合。
Ø預設情況下,Scala 使用的是不可變集合,如果想使用可變集合,需要引用 scala.collection.mutable.Set 包。
xs.contains(x) | 測試 x 是否是 xs 的元素。 |
---|---|
xs(x) | 與 xs contains x 相同。 |
xs.subsetOf(ys) | 測試 xs 是否是 ys 的子集。 |
加法: | |
xs + x | 包含 xs 中所有元素以及 x 的集合。 |
xs + (x, y, z) | 包含 xs 中所有元素及附加元素的集合 |
移除: | |
---|---|
xs - x | 包含 xs 中除x以外的所有元素的集合。 |
xs.empty | 與 xs 同類型的空集合。 |
二值操作: | |
xs.intersect(ys) | 集合 xs 和 ys 的交集。 |
xs.union(ys) | 集合 xs 和 ys 的並集。 |
xs.diff(ys) | 集合 xs 和 ys 的差集。 |
map
ØMap(對映)是一種可迭代的鍵值對(key/value)結構。所有的值都可以通過鍵來獲取。
ØMap 有兩種型別,可變與不可變,區別在於可變物件可以修改,而不可變物件不可以。
Ø預設情況下 Scala 使用不可變 Map。如果需要使用可變集合,需要顯式的引入 import scala.collection.mutable.Map 類
1 val shop:Map[String:Double]=Map("conmputer"->3600,"Iphone"->2000,"cup"->1000)
查詢: | |
---|---|
ms.get(k) | 返回一個Option,其中包含和鍵k關聯的值。若k不存在,則返回None。 |
ms(k) | (完整寫法是ms apply k)返回和鍵k關聯的值。若k不存在,則丟擲異常。 |
ms.getOrElse (k, d) | 返回和鍵k關聯的值。若k不存在,則返回預設值d。 |
ms.contains(k) | 檢查ms是否包含與鍵k相關聯的對映。 |
新增及更新: | |
---|---|
ms + (k -> v) | 返回一個同時包含ms中所有鍵值對及從k到v的鍵值對k -> v的新對映。 |
ms + (k -> v, l -> w) | 返回一個同時包含ms中所有鍵值對及所有給定的鍵值對的新對映。 |
ms ++ kvs | 返回一個同時包含ms中所有鍵值對及kvs中的所有鍵值對的新對映。 |
移除: | |
---|---|
ms - k | 返回一個包含ms中除鍵k以外的所有對映關係的對映。 |
ms – ks | 返回一個濾除了ms中與ks中給出的鍵相關聯的對映關係的新對映。 |
子容器(**Subcollection)** | |
ms.keys | 返回一個用於包含ms中所有鍵的iterable物件 |
ms.keySet | 返回一個包含ms中所有的鍵的集合。 |
ms.keysIterator | 返回一個用於遍歷ms中所有鍵的迭代器。 |
ms.values | 返回一個包含ms中所有值的iterable物件。 |
ms.valuesIterator | 返回一個用於遍歷ms中所有值的迭代器。 |
可變map方法
新增及更新 | |
---|---|
ms(k) = v | (完整形式為ms.update(x, v))。向對映ms中新增一個以k為鍵、以v為值的對映關係,ms先前包含的以k為值的對映關係將被覆蓋。 |
ms += (k -> v) | 向對映ms增加一個以k為鍵、以v為值的對映關係,並返回ms自身。 |
ms += (k -> v, l -> w) | 向對映ms中增加給定的多個對映關係,並返回ms自身。 |
ms ++= kvs | 向對映ms增加kvs中的所有對映關係,並返回ms自身。 |
ms.put (k, v) | 向對映ms增加一個以k為鍵、以v為值的對映,並返回一個Option,其中可能包含此前與k相關聯的值。 |
ms getOrElseUpdate (k, d) | 如果ms中存在鍵k,則返回鍵k的值。否則向ms中新增對映關係k -> v並返回d。 |
移除: | |
---|---|
ms -= k | 從對映ms中刪除以k為鍵的對映關係,並返回ms自身。 |
ms -= (k, l, m) | 從對映ms中刪除與給定的各個鍵相關聯的對映關係,並返回ms自身。 |
ms –= ks | 從對映ms中刪除與ks給定的各個鍵相關聯的對映關係,並返回ms自身。 |
ms.remove(k) | 從ms中移除以k為鍵的對映關係,並返回一個Option,其可能包含之前與k相關聯的值。 |
ms.clear() | 刪除ms中的所有對映關係 |
遍歷集合
for(k<- shop.keys){
} //shop是表名
Scala函式
1 def functionName([引數列表]):[return type] ={ 2 function body 3 return [expr] 4 } 5 可以簡寫為 6 7 def add(x:Int,y:Int)={ 8 x+y 9 }
可變函式
命名引數
預設引數值
匿名函式
匿名函式即是在定義函式的時候不給出函式名。
匿名函式是使用箭頭“=>”定義的,箭頭的左邊是引數列表,箭頭右邊是表示式,表示式將產生函式的結果。
簡寫
val list01=List(1,2,3,4)
list01.filter((x:Int)=>x%2==0)
list01.filter((x)=>x%2==0)
list01.filter(x=>x%2==0)
list01.filter(_%2==0)
高階函式
集合中的高階函式
Ømap:是指通過一個函式重新計算列表中所有元素,並且返回一個相同數目元素的新列表
Øforeach:和map類似,但是foreach沒有返回值,foreach只是為了對引數進行作用。
Øfilter:過濾移除使得傳入的函式的返回值為false的元素
Øflatten:可以把巢狀的結構展開,或者說flatten可以把一個二維的列表展開成一個一維的列表。
ØflatMap:結合了map和flatten的功能,接收一個可以處理巢狀列表的函式,然後把返回結果連線起來。
ØgroupBy是對集合中的元素進行分組操作,結果得到的是一個Map。
Øreduce:對資料進行規約
1 val list01=List(1,2,3,4,5,6) 2 list01.map(x=>x+1) 3 list01.filter(x=>x%2==0) 4 list01.foreach(x=>print(x+1)) 5 list01.groupBy(x=>x%2) 6
單詞計數
1 val list01=List("hello word","hello word") 2 list01.flatMap(x=>x.split(" ")).groupBy(x=>x).map(x=>(x._1,x._2.length)) 3 //第一個是單詞,第二個是單片語成的列表;列表。length可以實現技術
遞迴-》尾遞迴
類的定義
1 class test01(n:Int,d:Int){ 2 require(d!=0,"分母不能為0")//非常6,可以直接報錯 3 val number=n 4 val demo=d 5 override def toString: String ={ 6 number+"/"+demo 7 } 8 } 9 object Test { 10 def main(args: Array[String]): Unit = { 11 val rationali=new test01(1,2) 12 println(rationali.toString) 13 } 14 }
樣例類
可以直接比較內容,而不是比較地址
而且可以直接cope
資料讀取寫入
ØScala不提供任何特殊檔案寫入能力,所以進行檔案的寫操作使用的是Java的I/O類中的PrintWriter或FileWriter來實現。
寫入
import java.io.PrintWriter object Test03 { def main(args: Array[String]): Unit = { val mp=new PrintWriter("D:\\helloword.txt") mp.write("hello word") mp.close() } }
import java.io.File import java.io.FileWriter import java.io.BufferedWriter object Test03 { def main(args: Array[String]): Unit = { val mp=new BufferedWriter(new FileWriter(new File("D:\\hellword.txt"))) mp.write("hello word") mp.close()}}
讀取
import scala.io.Source object Test03 { def main(args: Array[String]): Unit = { val source=Source.fromFile("D:\\hello word.txt") for (elem <- source.getLines()) { println(elem) } } }