天天看點

大資料進階之路——Scala 進階函數

文章目錄

  • ​​進階函數​​
  • 字元串
  • 匿名函數
  • Currying
  • 高階函數

進階函數

  • 插值
val s ="hello"
  val name="jacksun"
  println(s+name)
  println(s+":"+name)

  println(s"hello:$name")

      
  • 多行字元串
//多行
  var d =
    """
      |1
      |2
      |3
      |4
      |5
      |5
      |6
    """.stripMargin
      

匿名函數分為有參匿名函數、無參匿名函數、有傳回值的匿名函數。(可以将匿名參數的傳回給一個val聲明的值,匿名函數不能顯式的聲明傳回值)
package org.example

object FunctionApp extends App {

  //有參數匿名函數
  val printy = (a : Int) => {
    println(a)
  }
  printy(999)

  //無參數匿名函數
  val printx = ()=>{
    println("Scala No.1")
  }
  printx()

  //有傳回值的匿名函數
  val add = (a:Int,b:Int) =>{
    a+b
  }
  println(add(4,4))

}


      

将接受一個參數的轉化成2個
def add(a:Int,b:Int) = a+b
println(add(2,1))
//Currying
def add2(a:Int)(b:Int) = a+b
println(add2(2)(1))

      

高階函數(Higher-Order Function)就是操作其他函數的函數。

Scala 中允許使用高階函數, 高階函數可以使用其他函數作為參數,或者使用函數作為輸出結果。

object Test {
   def main(args: Array[String]) {

      println( apply( layout, 10) )

   }
   // 函數 f 和 值 v 作為參數,而函數 f 又調用了參數 v
   def apply(f: Int => String, v: Int) = f(v)

   def layout[A](x: A) = "[" + x.toString() + "]"

}


      
  • map

對每個集合的元組進行操作

scala> val l =List(1,2,3,4,5,6,7,8,9)
l: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9)

scala> l.map(x=>(x+1))
res5: List[Int] = List(2, 3, 4, 5, 6, 7, 8, 9, 10)

scala> l.map((x:Int)=>x*2)
res6: List[Int] = List(2, 4, 6, 8, 10, 12, 14, 16, 18)

scala> l.map(x=>x*2)
res7: List[Int] = List(2, 4, 6, 8, 10, 12, 14, 16, 18)

scala> l.map(_*2)


      
  • filter

    過濾條件

scala> l.filter(_>5)
res9: List[Int] = List(6, 7, 8, 9)

      
  • take

    取數

scala> l.take(1)
res10: List[Int] = List(1)

scala> l.take(3)
res11: List[Int] = List(1, 2, 3)

      
  • reduce

    兩兩相加相減

scala> l.take(3).reduce(_-_)
res15: Int = -4
// 從左相減
scala> l.take(3).reduceLeft(_-_)
res16: Int = -4
// 從右相減
scala> l.take(3).reduceRight(_-_)
res17: Int = 2