zoukankan      html  css  js  c++  java
  • 大数据之scala基本语法学习

    package edu.snnu.test
    
    object list2 {
        //把字符串转化成一个char类型的list
         "99 Red Balloons".toList                  //> res0: List[Char] = List(9, 9,  , R, e, d,  , B, a, l, l, o, o, n, s)
         
         "99 Red Balloons".toList.filter(x => Character.isDigit(x))
                                                      //> res1: List[Char] = List(9, 9)
                                                      
        "99 Red Balloons".toList.takeWhile(x => x != 'B')
                                                      //> res2: List[Char] = List(9, 9,  , R, e, d,  )
     
         val c = List("x", "y", "z")               //> c  : List[String] = List(x, y, z)
         c.map(x => x.toUpperCase)                 //> res3: List[String] = List(X, Y, Z)
         
         //上面的语句可以简写为下面形式,因为scala中有下划线作为通配符
         c.map(_.toUpperCase())                    //> res4: List[String] = List(X, Y, Z)
     
         val a = List(1, 2, 3, 4)                  //> a  : List[Int] = List(1, 2, 3, 4)
         a.filter(_%2 == 1)                        //> res5: List[Int] = List(1, 3)
         
         //对a这个list中的每个奇数元素加上10
        a.filter(_%2 == 1).map(_+10)              //> res6: List[Int] = List(11, 13)
         
         val q = List(a, List(4, 5, 6))            //> q  : List[List[Int]] = List(List(1, 2, 3, 4), List(4, 5, 6))
         q.map(x => x.filter(_%2 == 0))            //> res7: List[List[Int]] = List(List(2, 4), List(4, 6))
         q.map(_.filter(_%2 == 0))                 //> res8: List[List[Int]] = List(List(2, 4), List(4, 6))
         
         //把有两个集合的集合中,内层中满足条件的元素变到一个list中
         q.flatMap {_.filter(_%2 == 0)}            //> res9: List[Int] = List(2, 4, 4, 6)
         
         
        
    }

    柯里化案例:

    (x: Int, y : Int) => x + y                      //> res0: (Int, Int) => Int = <function2>
      
      //def curriedAdd(a: Int)(b:Int)(c:Int)(d:Int) = a + b*c*d
      def curriedAdd(a:Int,b:Int)(c:Int)(d:Int) = a + b*c*d
                                                      //> curriedAdd: (a: Int, b: Int)(c: Int)(d: Int)Int
      //curriedAdd(2)(2)(2)(2)
        
        val addOne = curriedAdd(4,3)_             //> addOne  : Int => (Int => Int) = <function1>
        
        val c = addOne(2)(3)                      //> c  : Int = 22
        println(addOne)                           //> <function1>

    Map使用方法

    package edu.snnu.test
    
    object mapDemo {
      println("Welcome to the Scala worksheet")       //> Welcome to the Scala worksheet
    
        val p = Map(1 -> "David", 9 -> "Elwood", "rain" -> "明明")
                                                      //> p  : scala.collection.immutable.Map[Any,String] = Map(1 -> David, 9 -> Elwoo
                                                      //| d, rain -> 鏄庢槑)
        //通过key取map中对应的val
        p(1)                                      //> res0: String = David
        p(9)                                      //> res1: String = Elwood
        p("rain")                                 //> res2: String = 鏄庢槑
        
        //contains方法用来判断某个key在不在map里面
        p.contains(1)                             //> res3: Boolean = true
        
        p.contains(2)                             //> res4: Boolean = false
        
        //调用map变量的keys方法将会返回一个存储这个map所有key的list
        p.keys                                    //> res5: Iterable[Any] = Set(1, 9, rain)
        //val叶同样
        p.values                                  //> res6: Iterable[String] = MapLike(David, Elwood, 鏄庢槑)
        
        //添加一个(key,value)到map中
        val pp = p+(8->"Archer")                  //> pp  : scala.collection.immutable.Map[Any,String] = Map(1 -> David, 9 -> Elwo
                                                      //| od, rain -> 鏄庢槑, 8 -> Archer)
        p                                         //> res7: scala.collection.immutable.Map[Any,String] = Map(1 -> David, 9 -> Elwo
                                                      //| od, rain -> 鏄庢槑)
        
        pp                                        //> res8: scala.collection.immutable.Map[Any,String] = Map(1 -> David, 9 -> Elwo
                                                      //| od, rain -> 鏄庢槑, 8 -> Archer)
                                                      
         //删除一个(key, value):map变量减去要删除的键值对的key即可
         p-1                                       //> res9: scala.collection.immutable.Map[Any,String] = Map(9 -> Elwood, rain -> 
                                                      //| 鏄庢槑)
         p ++ List(2 ->"Alice", 5->"Bob")          //> res10: scala.collection.immutable.Map[Any,String] = Map(5 -> Bob, 1 -> David
                                                      //| , 9 -> Elwood, rain -> 鏄庢槑, 2 -> Alice)
                                                      
      p -- List(1, 9, 2, "rain")                      //> res11: scala.collection.immutable.Map[Any,String] = Map()
      
      p                                               //> res12: scala.collection.immutable.Map[Any,String] = Map(1 -> David, 9 -> Elw
                                                      //| ood, rain -> 鏄庢槑)
        p ++ List(2 ->"Alice", 5->"Bob") -- List(9, 1, "rain")
                                                      //> res13: scala.collection.immutable.Map[Any,String] = Map(5 -> Bob, 2 -> Alice
                                                      //| )
      
    }

    快速排序小案例

    package edu.snnu.test
    
    object qSort {
      println("Welcome to the Scala worksheet")       //> Welcome to the Scala worksheet
      
      def qSort(a:List[Int]):List[Int] = {
          if(a.length < 2) a
          else
              qSort(a.filter(_<a.head)) ++
              a.filter(_ == a.head) ++
              qSort(a.filter(_>a.head))
      }                                               //> qSort: (a: List[Int])List[Int]
      
      val l = List(1, 2, 3, 4, 5, 9, 8, 7, 6)         //> l  : List[Int] = List(1, 2, 3, 4, 5, 9, 8, 7, 6)
      qSort(List(4, 3, 2, 6, 7, 8, 9))                //> res0: List[Int] = List(2, 3, 4, 6, 7, 8, 9)
      qSort(l)                                        //> res1: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9)
      
      
    }

    range的使用

    package edu.snnu.test
    
    object Range {
      println("Welcome to the Scala worksheet")       //> Welcome to the Scala worksheet
      
      1 to 10                                         //> res0: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7,
                                                      //|  8, 9, 10)
      1 to 10 by 2                                    //> res1: scala.collection.immutable.Range = Range(1, 3, 5, 7, 9)
      
    
        (1 to 10).toList                          //> res2: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
        
        1 until 10                                //> res3: scala.collection.immutable.Range = Range(1, 2, 3, 4, 5, 6, 7, 8, 9)
        
        //也就是说to上届是一个闭区间 ,until上界是一个闭区间
        val s = 1     #::2 #:: 3 #::Stream.empty
                                                      //> s  : <error> = Stream(1, ?)
    }

    reduceLeft以及foldleft规约的使用

    package edu.snnu.test
    
    object reduceLeft {
        //reduceLeft是一种规约方法
      val a = List(1, 2, 3, 4)                        //> a  : List[Int] = List(1, 2, 3, 4)
         //map的返回值和原来的值的类型是一样的,flatMap会把两层的map转化为一层的map
         a.reduceLeft((x, y) => x + y)             //> res0: Int = 10
        //简写方式,用两个下划线来代替这两个参数
        a.reduce(_+_)                             //> res1: Int = 10
        
        //foldleft也是一种规约方法
        a.foldLeft(1)(_+_)                        //> res2: Int = 11
        a.foldLeft(2)(_*_)                        //> res3: Int = 48
    }

    懒加载

    package edu.snnu.test
    
    
    object StreamDemo {
      println("Welcome to the Scala worksheet")       //> Welcome to the Scala worksheet
      
      //懒加载,在用的时候求值,按需求值
      //val a = 1 #:: 2 #:: 3 #:: Stream.empty
      
      //val stream = (1 to 10000000).toStream()
      
    }

    List的使用

    package edu.snnu.test
    
    object test1 {
      println("Welcome to the Scala worksheet")       //> Welcome to the Scala worksheet
      
      
      val a = List(1, 2, 3, 4)                        //> a  : List[Int] = List(1, 2, 3, 4)
      
      //把0添加到刚才的list里面,两个冒号为连接操作符,连接操作符的左边是成员,右边是一个list
      val b = 0::a                                    //> b  : List[Int] = List(0, 1, 2, 3, 4)
      
      val c = "x"::"y"::"z"::Nil                      //> c  : List[String] = List(x, y, z)
      
      //生成一个list(z)
      "z"::Nil                                        //> res0: List[String] = List(z)
      
      //三个毛冒号的连接操作符用于连接两个list
      a:::c                                           //> res1: List[Any] = List(1, 2, 3, 4, x, y, z)
      
      //list的head方法返回当前list的第一个元素
      a.head                                          //> res2: Int = 1
      b.head                                          //> res3: Int = 0
      c.head                                          //> res4: String = x
      
      //list的tail方法返回当前list里除了第一个元素外的所有元素组成的list,这样的列表我们称为尾列表
      a                                               //> res5: List[Int] = List(1, 2, 3, 4)
      a.tail                                          //> res6: List[Int] = List(2, 3, 4)
      b                                               //> res7: List[Int] = List(0, 1, 2, 3, 4)
      b.tail                                          //> res8: List[Int] = List(1, 2, 3, 4)
      
      a.isEmpty                                       //> res9: Boolean = false
      
         Nil                                       //> res10: scala.collection.immutable.Nil.type = List()
         Nil.isEmpty                               //> res11: Boolean = true
         
         def walkthru(l:List[Int]) :String = {
             if(l.isEmpty) ""
             else {
                 println(l.tail)
                 l.head.toString+""+walkthru(l.tail)
                 
             }
         }                                         //> walkthru: (l: List[Int])String
      
         walkthru(List(1,2,3,4,5))                 //> List(2, 3, 4, 5)
                                                      //| List(3, 4, 5)
                                                      //| List(4, 5)
                                                      //| List(5)
                                                      //| List()
                                                      //| res12: String = 12345
      
      //对list a进行过滤,如果里面的元素x满足x%2 == 1,那么保留下来,否则就删除
      a.filter(x => x%2 == 1)                         //> res13: List[Int] = List(1, 3)
    }

    tuple的使用

    package edu.snnu.test
    
    object tuple {
      
      1 -> 2                                          //> res0: (Int, Int) = (1,2)
      
      //定义一个tuple
      val t = (1, "Alice", "Math", 95,5)              //> t  : (Int, String, String, Int, Int) = (1,Alice,Math,95,5)
       
      //获得tuple t的第一个成员
      t._1                                            //> res1: Int = 1
         //获得tuple t的第二个成员
         t._2                                      //> res2: String = Alice
         //第三个
         t._3                                      //> res3: String = Math
         
         //函数的返回值一般都只有一个值,如果有多个值的话我们就可以把这多个值封装在一个tuple里,
         
         val a = List(1, 2, 3, 4)                  //> a  : List[Int] = List(1, 2, 3, 4)
         
         //(Int, Int, Int)代表返回值是一个三个int数据的list
         def sumSq(in: List[Int]):(Int,Int,Int) = {
             //下面t代表(0, 0, 0)这个元组,v代表这个list中的每一个值
             in.foldLeft((0,0,0))((t,v) => (t._1 + 1, t._2+v, t._3+v*v))
         }                                         //> sumSq: (in: List[Int])(Int, Int, Int)
         
         sumSq(a)                                  //> res4: (Int, Int, Int) = (4,10,30)
         
    }
  • 相关阅读:
    HDU 1800 Flying to the Mars 字典树,STL中的map ,哈希树
    字典树 HDU 1075 What Are You Talking About
    字典树 HDU 1251 统计难题
    最小生成树prim算法 POJ2031
    POJ 1287 Networking 最小生成树
    次小生成树 POJ 2728
    最短路N题Tram SPFA
    poj2236 并查集
    POJ 1611并查集
    Number Sequence
  • 原文地址:https://www.cnblogs.com/rain-1/p/5804740.html
Copyright © 2011-2022 走看看