spark case关键字详解

spark中case关键字,很有用,很强大,case语法与java中的switch语法类似,但比switch更强大。

一、case做模式匹配

1.正则匹配

val Pattern="(a.*)".r//
    val v1="spark";
    val r=v1 match  {
      case Pattern(v1)=> "start"
      case "1"=> "1"
      case "2"=> "2"
      case _=> "default"
    }
    println(r)//default

//假如 val v1= "abcdf" 打印出来的就是start

2. 值匹配

    val r=input match  {
      case 1=> "1"
      case 2=> "1"
      case 3=> "2"
      case _=> "default"
    }

假如输入的input=1那么打印出来r的结果就是1

3.范围匹配

val r=input match  {
      case input if 1 until 5 contains input=> "1to5"
      case input if 5 until 10 contains input=> "5to10"
      case _=> "not found"
    }

假如输入的是input=3,那么打印”1to5",因为3在1和5直接。

4.其他匹配

主要是看if条件是符合写的,本质上雷同

二、Case使用在类class前面声明为case class

class之前添加case可以自动生成equal、hashcode、toString、copy方法 和他的伴生对象,并且为伴生对象生成apply、unapply方法

//case class 是一个模式类,而case object 是全局的一个唯一的实例,
//模式类之间不能互相继承,必须统一继承一个抽象类或者trait 
//class DataFrameWork
//模式类,与普通类没什么区别,只是一定要有参数
//case class ComputationFramework(name:String,popular:Boolean)extends DataFrameWork
//case class StorageFramework(name:String,popular:Boolean)extends DataFrameWork

//模式类的方法
case class ForFun(name:String) ;
object fun2{ 
    def main(args: Array[String]): Unit = { 
    val forfun = ForFun.apply("Jack") ;
    println(forfun.name) ;
    val forFun2 = new ForFun("Nacy") ;
    println(forFun2.name+":"+forFun2.hashCode()+":"+forFun2.toString);
    println(forfun equals forFun2) ;
   } 
}

case 声明类的好处

    1. 创建 case class 和它的伴生 object
    2. 实现了 apply 方法让你不需要通过 new 来创建类实例
    3. 默认为主构造函数参数列表的所有参数前加 val
    4. 添加天然的 hashCode、equals 和 toString 方法。由于 == 在 Scala 中总是代表 equals,所以 case class 实例总是可比较的
    5. case 进行模式匹配,一旦匹配成功即返回。

下面的三个操作效果是等价的

val p0 = new Person("json", 29, "Blue") // normal constructor

val p1 = Person("json", 29, "Blue") // this uses apply

val p2 = Person.apply("json", 29, "Blue") // using apply manually
 

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值