Scala初學小練習
阿新 • • 發佈:2018-12-23
package cn.allengao.exercise object Exercise { def main(args: Array[String]): Unit = { //建立一個List val list0 = List(2, 5, 9, 6, 7, 1, 8, 3, 4, 0) //將list0中的每個元素乘以2後生成一個新的集合 // “_” 表示將list0中的每一個元素取出。ctrl+alt+v 快捷鍵生成區域性變數。ctrl+alt+L格式化快捷鍵 val list1 = list0.map(_ * 2) //將list0中的偶數取出來生成一個新的集合 val list2 = list0.filter(_ % 2 == 0) //將list0排序後生成一個新的集合 val list3 = list0.sorted //反轉排序順序 val list4 = list3.reverse //將list0中的元素4個一組,型別為Iterator[List[Int]] val itr = list0.grouped(4) //將Iterator轉換成一個List val list5 = itr.toList //將多個List壓扁成一個List val list6 = list5.flatten //先按空格切分,再壓平 val lines = List("hello java ", "hello scala", "hello python") // val words = lines.map(_.split(" ")) // val flatwords = words.flatten val res = lines.flatMap(_.split(" ")) //平行計算求和 val arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) // val res1 = arr.sum //和執行緒有關,會每個執行緒計算一部分,例如:((1+2+3+4)+(5+6+7+8)+(9+10)) val res1 = arr.par.sum //按照特定的順序進行聚合 //第一個_代表拿取到的第一個元素,第二個_代表拿取到的第二個元素,內部迴圈, // 下次再迴圈用上次的中間結果再加下一個值。(reduce呼叫了reduceLeft方法) //(((1+2)+3)+4)+5...... 實現過程 val res2 = arr.reduce(_ + _) // val res3 = arr.reduceLeft(_+_) // val res4 = arr.reduceRight(_+_) // val res5 = arr.par.reduce(_+_) //並行執行,如果執行減(_-_),每次的結果是不一樣的。 //ctrl+d 快捷鍵複製上一行 //摺疊:有初始值(無特定順序) val res6 = arr.fold(0)(_ + _) //聚合時要將初始值累加進去 val res7 = arr.par.fold(10)(_ + _) //並行執行,初始值每個執行緒都加10,每次執行結果不一樣。 //摺疊:有初始值(有特定順序) val res8 = arr.foldLeft(10)(_ + _) val res9 = arr.foldRight(10)(_ + _) val res10 = arr.foldLeft(10)(_ - _) //該語句中每次執行結果都一樣,是-45,因為foldLeft左摺疊優先,從左向右順序執行,par可以省略。 val res11 = arr.par.foldLeft(10)(_ - _) //聚合 val list7 = List(List(1,2,3),List(3,4,5),List(2),List(0)) val res12 = list7.flatten.reduce(_+_) //第一個引數,第一個_表示括號內的初始值,第二個_表示每一個小的List,.sum表示每個小的List區域性聚合。 //第二個引數,表示全域性聚合。 val res13 = list7.aggregate(0)(_+_.sum,_+_) val l1 = List(5,6,4,7) val l2 = List(1,2,3,4) //求並集 val res14 = l1 union l2 //求交集 val res15 = l1 intersect l2 //求差集 val res16 = l1 diff l2 } }