大資料數列修鍊-Scala課程10

來源:互聯網
上載者:User

標籤:

今天主要是關於Scala中對List的相關操作,list在Scala中應該是至關重要,接下來會講解關於List的一系列操作

List的map、flatMap、foreach、filter操作講解

  1.關於List的Map、flatMap操作、區別

  2.對List的foreach、filter操作

    //list中的Map中用一個函數運算式-->實則是對list進行操作,_可以表示一個函數或者運算式        List(1, 2, 3, 4, 6) map (_ + 1)   //> res0: List[Int] = List(2, 3, 4, 5, 7)    val data = List("Scala", "Hadoop", "Spark")   //> data  : List[String] = List(Scala, Hadoop, Spark)    //計算List中元素的長度    data map (_.length)                           //> res1: List[Int] = List(5, 6, 5)    //把Lis元素轉換為list並t倒置後又組成list輸出    data map (_.toList.reverse.mkString)          //> res2: List[String] = List(alacS, poodaH, krapS)    //把list中元素轉換為list    data.map(_.toList)                            //> res3: List[List[Char]] = List(List(S, c, a, l, a), List(H, a, d, o, o, p), L    //flatMap把list元素轉換為list後,再串連成新的list輸出         //| ist(S, p, a, r, k))        data.flatMap(_.toList)                        //> res4: List[Char] = List(S, c, a, l, a, H, a, d, o, o, p, S, p, a, r, k)    //range是左臂右開的,[1,10) -->flatMap組成元素    List.range(1, 10) flatMap (i => List.range(1, i) map (j => (i, j)))                                                  //> res5: List[(Int, Int)] = List((2,1), (3,1), (3,2), (4,1), (4,2), (4,3), (5,1                                                  //| ), (5,2), (5,3), (5,4), (6,1), (6,2), (6,3), (6,4), (6,5), (7,1), (7,2), (7,                                                  //| 3), (7,4), (7,5), (7,6), (8,1), (8,2), (8,3), (8,4), (8,5), (8,6), (8,7), (9                                                  //| ,1), (9,2), (9,3), (9,4), (9,5), (9,6), (9,7), (9,8))        var sum = 0                                   //> sum  : Int = 0    List(1, 2, 3, 4, 5) foreach (sum += _)    println("sum : " + sum)                       //> sum : 15    //filter過濾    println(List(1, 2, 3, 4, 6, 7, 8, 9, 10) filter (_ % 2 ==0))                                                  //> List(2, 4, 6, 8, 10)    println(data filter (_.length == 5))          //> List(Scala, Spark)

 

List的partition、find、takeWhile、dropWhile、span、forall、exsists操作實現

  1.關於Scala中List的partition、find、takeWhile、dropWhile實現

  2.關於Scala中的span。forall、exsists執行個體講解

 //partition按照運算式進行拆分為兩個list    println(List(1, 2, 3, 4, 5) partition (_ % 2 ==0))                                                  //> (List(2, 4),List(1, 3, 5))     //find尋找list中符合運算式的元素有幾個    println(List(1, 2, 3, 4, 5) find (_ % 2 ==0)) //> Some(2)    println(List(1, 2, 3, 4, 5) find (_  <=0))    //> None    //takeWhile表示list滿足表示式組成list    println(List(1, 2, 3, 4, 5) takeWhile (_  < 4))                                                  //> List(1, 2, 3)      //dropWhile表示list中滿足運算式形成新的list與其相反    println(List(1, 2, 3, 4, 5) dropWhile (_  < 4))                                                  //> List(4, 5)     //span是上面兩者的組合    println(List(1, 2, 3, 4, 5) span (_  < 4))    //> (List(1, 2, 3),List(4, 5))    //exists表示組成元素是否存在該運算式的元素-->如果有則返回true否則返回false    def hastotallyZeroRow(m: List[List[Int]]) = m exists (row => row forall (_ == 0))                                                  //> hastotallyZeroRow: (m: List[List[Int]])Boolean    val m= List(List(1,0,0), List(0,1,0), List(0,0,1))                                                  //> m  : List[List[Int]] = List(List(1, 0, 0), List(0, 1, 0), List(0, 0, 1))    println(hastotallyZeroRow(m))                 //> false
List的foldLeft、foldRight、sortWith操作實現

  1.foldLeft、foldRight執行個體講解

  //foldLeft源碼中可以看出定義了兩個函數進行求和計算
 def /:[B](z: B)(op: (B, A) => B): B = foldLeft(z)(op) def :\[B](z: B)(op: (A, B) => B): B = foldRight(z)(op) def foldLeft[B](z: B)(op: (B, A) => B): B = { var result = z this foreach (x => result = op(result, x)) result }

  2.sortWith執行個體講解

      //兩個等價 從零開始相加    println((1 to 100).foldLeft(0)(_+_) )         //> 5050    println((0 /: (1 to 100))(_+_))               //> 5050    //從1到5進行相減    println((1 to 5).foldRight(100)(_-_))         //> -97    println(((1 to 5):\100)(_-_))                 //> -97        //對list進行排序    println(List(1, -3, 4, 2, 6) sortWith (_ < _))//> List(-3, 1, 2, 4, 6)
List伴生對象操作方法實現講解

  1.關於List的apply、make、range執行個體講解

  2.unzip、flatten、contact、map2執行個體講解

  //List.apply()=List()    println(List(1, 2, 3))                        //> List(1, 2, 3)    //List.make複製同樣的元素   // List.make(3, 5)   //range 左閉右開    println(List.range(1, 5))                     //> List(1, 2, 3, 4)    //計算間距為-3的元素    println(List.range(9, 1, -3))                 //> List(9, 6, 3)    //abcde轉換為list後進行組合    val zipped = "abcde".toList zip List(1, 2, 3, 4, 5)                                                  //> zipped  : List[(Char, Int)] = List((a,1), (b,2), (c,3), (d,4), (e,5))    println(zipped)                               //> List((a,1), (b,2), (c,3), (d,4), (e,5))    //把zipped轉換為反向的    println(zipped.unzip)                         //> (List(a, b, c, d, e),List(1, 2, 3, 4, 5))    //fatter把list中的list轉換為一個list    println(List(List(‘a‘, ‘b‘), List(‘c‘), List(‘d‘, ‘e‘)).flatten)     //把list組合轉換為list                             //> List(a, b, c, d, e)    println(List.concat(List(), List(‘b‘), List(‘c‘)))                                                  //> List(b, c)         //map2兩個list按照最後一個運算式進行計算    //println(List.map2(List(10, 20), List(10, 10)) (_ * _))

該內容都是從王家林老師教程中學習,他的號:18610086859

最新課程視頻76講:http://yun.baidu.com/s/1qWkPspm

該文章的地址35-38講:http://pan.baidu.com/s/1qWxaAeC

 

大資料數列修鍊-Scala課程10

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.