Scala入门之提取器

提取器

这知识感觉多数跟case class配合使用,但是在与case class配合使用时就算不知道后面的工作机制也没什么关系,会用就行。
其实有必要的话可以自己写提取器,而什么时候用提取器,怎么提高数据传输效率才是难点 :(
直接上代码,加上个人理解
package com.dt.scala.moguyun

/**
  * 提取器
  * unapply
  * 看两点:
  * 1 类有没有unapply方法
  * 2 unapply方法里传的参数是不是右边的
  * 即可调用
  * Created by hlf on 2016/8/11.
  */


case class Person1(name: String, age: Int) {
  val content = name
}
case class Person2(name: String, age: Int, salary: Int) {
}

/**
  * 新建类,里面有apply和unapply方法
  */
class DTCoder(val name: String, val salary: Int)

object DTCoder {
  def apply(name: String, salary: Int) = {
    println("DTCoder apply methode invoked !!!")
    new DTCoder(name, salary)
  }

  def unapply(information: DTCoder) = {
    Some((information.name, information.salary))

    /*
    //少见,基本都是传入一个对象
    def unapply(information:String)= {
       Some((information.substring(0,information.indexOf(" ")),information.substring(0,information.indexOf(" ")+1)))
       }
    */
  }
}

object HelloExtractor {
  def main(args: Array[String]): Unit = {
    //case class会自动生成apply和unapply方法,所以不用new,
    //Person1("spark", 6)与下面的是一样的
    val person = Person1.apply("spark", 6)
    //将person用unapply提取出name,age赋值给另一个case class
    //赋值给同类型的case class
    val Person1(name1, age1) = person
    //赋值给不同类型的case class
//    val Person2(name2, age2) = person//运行时报错,说要求是Person1才行
    println("person1" + name1 + " : " + age1)
//    println("person2" +name2 + " : " + age2)

    person match {
      case Person1(name, age) => println("wow   " + name + " : " + age)
    }

    val dtcoder = DTCoder("hadoop", 200)
    println(dtcoder.name + ": " + dtcoder.salary)
    //像这种用提取器提取出来再赋值给同一个类型对象有意思吗?还不如用上面的dtcoder.name点出来呢 -_-!
    val DTCoder(dtname1, dtsalary1) = dtcoder
    println("dtname1   " + dtname1 + " : " + dtsalary1)

    /*
    val DTCoder(dtname,dtsalary) = "spark 100"
      println("dtname   "+dtname+ " : " +dtsalary)
      */
    //从字符串通过提取器构建出一个类,在网络传输时能大大提高性能,这是一个思考方向。

  }

}
结果
person1spark : 6
wow   spark : 6
DTCoder apply methode invoked !!!
hadoop: 200
dtname1   hadoop : 200

以上内容来自[DT大数据梦工厂]首席专家Spark专家王家林老师的课程分享。感谢王老师的分享,更多精彩内容请扫描关注[DT大数据梦工厂]微信公众号DT_Spark

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值