• 大数据之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)
         
    }
  • 相关阅读:
    LeetCode之“数学”:Rectangle Area
    HTML5 简介、HTML5 浏览器支持
    Android EditText获取焦点和失去焦点监听事件
    HTML 速查列表
    HTML URL
    HTML 字符实体
    HTML 脚本
    HTML 颜色值
    HTML 颜色名
    HTML 颜色
  • 原文地址:https://www.cnblogs.com/rain-1/p/5804740.html
Copyright © 2020-2023  润新知