第13課Scala模式匹配實戰

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">object helloPatternMatch { </span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">def main(args: Array[String]): Unit = { </span>

    getSalary("Spark") 

    getSalary("Hadoop")

    getSalary("Scala") 


<span style="font-family: Arial, Helvetica, sans-serif;">    getSalary("test",6) //第二個參數作判斷條件</span>
}

def getSalary(name: String) {
    name match {
      case "Spark"                         => println("$150000/year")
      case "Hadoop"                        => println("$100000/year")
      case _ if name == "Scala"            => println("$140000/year")
      case _ if name == "Hadoop Mapreduce" => println("$90000/year")
      case _                               => println("$80000/year")
    }
  }
def getSalary(name: String, age: Int) {
    name match {
      case "Spark"                         => println("$150000/year")
      case "Hadoop"                        => println("$100000/year")
      case _ if name == "Scala"            => println("$140000/year")
      case _ if name == "Hadoop Mapreduce" => println("$90000/year")
      case _name <span style="color:#ff6666;">if age >= 5 </span>              => println("$95000/year")
      case _                               => println("$80000/year")
    }
  }

Result:

$150000/year

$100000/year

$140000/year

$95000/year

main方法中調用:  
    getMatchType(100)
    getMatchType(100.0)
    getMatchType(Array(13,15))
    getMatchType(Array("Spark","Scala"))

def getMatchType(msg: Any) {
    msg match {
      case i: Int            => println("Integer")
      case s: String         => println("String")
      case d: Double         => println("Double")
      case array: Array[Int] => println("Array")
      case _                 => println("Unknown Type")
    }
  }
Result:

Integer

Double
Array
Unknown Type


main方法中調用

  getMatchCollection(Array("Scala","Python")); //不在前三個結果範圍內, 第4個case
  getMatchCollection(Array("Scala","Java"));   //第二個case
  getMatchCollection(Array("Spark","Java","hahaha"));//第一個是Spark值,3個值,符合第3個case

  def getMatchCollection(msg: Any) {
    msg match {
      case Array("Scala")         => println("One element")
      case Array("Scala", "Java") => println("Twp elements")
      case Array("Spark", _*)     => println("Many elements")
      case _                      => println("Unknown Type")
    }
  }



Result:

Unknown Type 

Twp elements 

Many elements

定義class及case class

class DataFrameWork
case class ComputationFramework(name: String, popular: Boolean) extends DataFrameWork
case class StorageFramework(name: String, popular: Boolean) extends DataFrameWork
main方法中調用:
    getBigDataType(ComputationFramework("Spark", true))
    getBigDataType(ComputationFramework("Spark", false))
    getBigDataType(StorageFramework("HDFS", false))

  def getBigDataType(data: DataFrameWork) {
    data match {
      case ComputationFramework(name, popular) =>
        println("ComputationFramework : " + "name : " + name + ", popular:" + popular)
      case StorageFramework(name, popular) =>
        println("StorageFramework : " + "name : " + name + ", popular:" + popular)
      case _ => println("Some other type")
    }
  }
Result:

ComputationFramework : name : Spark, popular:true
ComputationFramework : name : Spark, popular:false
StorageFramework : name : HDFS, popular:false

main方法中調用:
    getValue("Spark", Map("Spark" -> "The hottest!", "Hadoop" -> "Other"))
    getValue("Hadoop", Map("Spark" -> "The hottest!", "Hadoop" -> "Other"))
    getValue("Scala", Map("Spark" -> "The hottest!", "Hadoop" -> "Other"))

  def getValue(key: String, context: Map[String, String]) {
    context.get(key) match {
      case Some(value) => println(value)
      case None        => println("Not Found")
    }
  }
Result:

The hottest!
Other
Not Found




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章