• 小记--------scala-模式匹配


    模式匹配,类似于java中的switch case 语法,即对一个值进行条件判断,然后针对某种条件,针对不同的处理
        但是scala的模式匹配的功能比java的switch case语法的功能要强大很多,java的switch case语法只能对值进行匹配,但是scala的模式匹配除了可以对值进行匹配之外,还可以对类型进行匹配,对Array和List的元素情况进行匹配,对case class(样例类) 进行匹配,甚至对有值或没值(Option)进行匹配。
        而且对于spark来说,scala的模式匹配功能也是极其重要的,在spark源码中大量地使用了模式匹配功能,因此为了更好地编写scala程序,并且更加通畅地看懂spark源码。
     
    模式匹配的基础语法(案例:成绩评价)
        scala提供了更加强大的match case语法,即模式匹配。它可以匹配各种类型:比如变量的类型、集合的元素、有值或无值
        match case的语法:变量 match{ case 值 => 语法}
        如果值为下划线,则代表了不满足以上所有情况下的默认情况如何处理。
        match case中,主要一个case分支满足并处理了,就不会继续判断下一个case分支了。
     
    对类型进行模式匹配(案例:异常处理)
        scala的模式匹配可以直接匹配类型,而不是值
        语法:     变量 match case 变量:类型 => 代码
     
    对Array和List的元素进行模式匹配(案例:对朋友打招呼)
        对Array进行模式匹配,分别可以匹配带有指定元素的数组,带有指定个数元素的数组、以某元素打头的数组
       
    对List进行模式匹配,与Array类似,但是需要使用List特有的  ::  操作符
    case class与模式匹配(案例:学校门禁)
         scala中提供了一种特殊的类,用case class进行声明也称为样例类。
        case class有点类似于java中的javaBean的概念,只定义了field, 并且由scala编译时自动提供Getter和setter方法,但是是没有method也就是方法
        case class 的主构造函数接收的参数通常不需要使用var或val修饰,scala自动就会使用val修饰,除非自己定义了var。 否则默认为val
        scala自动为case class定义了伴生对象,也就是同名的object。并且定义了apply()方法,该方法接收主构造函数中相同的参数,并返回case class对象
     
    Option与模式匹配(案例:成绩查询)
        scala有一种特殊的类型,叫做Option,
        Option有两种值,一种是Some 表示有值,
                                    一种是None    表示没有值
        Option通常会用于模式匹配中,用于判断某个变量时有值还是没有值,这比null来的更加简洁明了
        Option的用法必须掌握,spark源码使用了大量Option  比如Some(a) None 等
    修改传入参数为Int类型
        首先对map进行key、value 反转, 然后 gg函数传入Int类型, 判断Int类型
     
     
  • 相关阅读:
    白话LINQ系列2以代码演进方式学习LINQ必备条件
    《Entity Framework 6 Recipes》中文翻译系列 (9) 第二章 实体数据建模基础之继承关系映射TPH
    Linq To Sqlite 一一二二
    《Entity Framework 6 Recipes》中文翻译系列 (10) 第二章 实体数据建模基础之两实体间Isa和Hasa关系建模、嵌入值映射
    《Entity Framework 6 Recipes》中文翻译系列 (14) 第三章 查询之查询中设置默认值和存储过程返回多结果集
    《Entity Framework 6 Recipes》中文翻译系列 (13) 第三章 查询之使用Entity SQL
    白话LINQ系列1什么是LINQ?
    《Entity Framework 6 Recipes》翻译系列 (3) 第二章 实体数据建模基础之创建一个简单的模型
    JS 实现trim()
    mysql表切换引擎的几种方法
  • 原文地址:https://www.cnblogs.com/yzqyxq/p/12683386.html
Copyright © 2020-2023  润新知