第13課 Scala模式匹配實戰

package com.dtspark.scala.basics

class DataFrameWork
case class ComputationFramework(name: String, popular: Boolean) extends DataFrameWork
case class StorageFramework(name: String, popular: Boolean) extends DataFrameWork

object helloPatternMatch {
  def main(args: Array[String]): Unit = {
    println("\n#getSalary#")
    getSalary("Spark")
    getSalary("Hadoop")
    getSalary("Scala")
    getSalary("test", 6)
    
    println("\n#getMatchType#")
    getMatchType(100)
    getMatchType(100.0)
    getMatchType(Array(13, 15))
    getMatchType(Array("Spark", "Scala"))
    
    println("\n#getMatchCollection#")
    getMatchCollection(Array("Scala", "Python"));
    getMatchCollection(Array("Scala", "Java"));
    getMatchCollection(Array("Spark", "Java", "hahaha"));
    
    println("\n#getValue#")
    getValue("Spark", Map("Spark" -> "The hottest!", "Hadoop" -> "Other"))
    getValue("Hadoop", Map("Spark" -> "The hottest!", "Hadoop" -> "Other"))
    getValue("Scala", Map("Spark" -> "The hottest!", "Hadoop" -> "Other"))
    
    println("\n#getBigDataType#")
    getBigDataType(ComputationFramework("Spark", true))
    getBigDataType(ComputationFramework("Spark", false))
    getBigDataType(StorageFramework("HDFS", false))

  }

  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 if age >= 5               => println("$95000/year")
      case _                               => println("$80000/year")
    }
  }

  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")
    }
  }
  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")
    }
  }

  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")
    }
  }

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

}


運行結果:



#getSalary#
$150000/year
$100000/year
$140000/year
$95000/year


#getMatchType#
Integer
Double
Array
Unknown Type


#getMatchCollection#
Unknown Type
Twp elements
Many elements


#getValue#
The hottest!
Other
Not Found


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



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