6 涤生手记

尚未进行身份认证

我要认证

别问我是谁,也别与我相恋,像我这样的人不多。

等级
TA的排名 542

Scala系列22:Scala泛型,非变,协变,逆变等使用详解

0.泛型scala和Java一样,类和特质、方法都可以支持泛型。我们在学习集合的时候,一般都会涉及到泛型。所以泛型,简单点理解就是定义(类,方法等)不指定具体数据类型,而在使用时才传入具体使用类型,这样的好处就是支持多类型的复用。0.1定义一个泛型方法在scala中,使用方括号[]来定义类型参数。语法格式def 方法名[泛型名称](..) = { //...}示例说明用一个方法来获取任意类型数组的中间的元素 不考虑泛型直接实现(基于Array[Int]实现) 加

2020-09-08 22:02:20

Scala系列21:Scala提取器的使用

0.提取器(Extractor)我们之前已经使用过scala中非常强大的模式匹配功能了,通过模式匹配,我们可以快速匹配样例类中的成员变量。例如:// 1. 创建两个样例类case class Person(name:String, age:Int)case class Order(id:String)def main(args: Array[String]): Unit = { // 2. 创建样例类对象,并赋值为Any类型 val zhangsan:Any = Perso

2020-09-08 21:14:17

Scala系列20:Scala中异常捕获与抛出异常

0.异常处理来看看下面一段代码 def main(args: Array[String]): Unit = { val i = 10 / 0 println("你好!") }Exception in thread "main" java.lang.ArithmeticException: / by zero at ForDemo$.main(ForDemo.scala:3) at ForDemo.main(ForDemo.scala)执行程序,可以看到

2020-09-08 14:35:22

Scala系列19:Option类型,隐函数以及正则表达式的使用详解

0. Option类型使用Option类型,可以用来有效避免空引用(null)异常。也就是说,将来我们返回某些数据时,可以返回一个Option类型来替代。scala中,Option类型来表示可选值。这种类型的数据有两种形式: Some(x):表示实际的值 None:表示没有值 使用getOrElse方法,当值为None是可以指定一个默认值 0.1示例演示示例1定义一个两个数相除的方法,使用Option类型来封装结果 然后使用模式匹配来打印...

2020-09-07 15:31:52

Scala系列18: 模式匹配之简单匹配,匹配类型,守卫,匹配样例类,匹配集合等详解

0.模式匹配scala中有一个非常强大的模式匹配机制,可以应用在很多场景:switch语句 类型查询 使用模式匹配快速获取数据1.简单模式匹配在Java中,有switch关键字,可以简化if条件判断语句。在scala中,可以使用match表达式替代。1.1 语法格式变量 match { case "常量1" => 表达式1 case "常量2" => 表达式2 case "常量3" => 表达式3 case _ => 表达式

2020-09-07 14:40:57

Scala系列17:样例类,样例对象以及样例方法使用详解

0.样例类 样例类是一种特殊类,它可以用来快速定义一个用于保存数据的类(类似于Java POJO类),在后续要学习并发编程和spark、flink这些框架也都会经常使用它。0.1定义样例类语法语法格式 在[]里的参数是可选的case class 样例类名([var/val] 成员变量名1:类型1, 成员变量名2:类型2, 成员变量名3:类型3)如果要实现某个成员变量可以被修改,可以添加var 默认为val,可以省略0.2示例 | 定义一个样例类参考代码/**示例...

2020-09-05 18:53:48

Scala系列16:trait实战,trait实现调用链模式

1.业务需求我们如果要开发一个支付功能,往往需要执行一系列的验证才能完成支付。例如:进行支付签名校验 数据合法性校验 ...如果将来因为第三方接口支付的调整,需要增加更多的校验规则,此时如何不修改之前的校验代码,来实现扩展呢?2.业务逻辑剖析2.1责任链模式2.2trait调用链【尖叫提示】 类多继承traint方法的调用顺序和构造器的调用顺序是不一致的。 类继承了多个trait后,可以依次调用多个trait中的同一个方法,只要让多个trait中的同一个方法在最...

2020-09-05 17:08:24

Scala系列15:抽象,匿名内部类,特质,模板等使用详解与演示

0. 抽象类和Java语言一样,scala中也可以定义抽象类0.1 定义如果类的某个成员在当前类中的定义是不包含完整的,它就是一个抽象类不完整定义有两种情况:方法没有方法体(抽象方法) 变量没有初始化(抽象字段)定义抽象类和Java一样,在类前面加上abstract关键字// 定义抽象类abstract class 抽象类名 { // 定义抽象字段 val 抽象字段名:类型 // 定义抽象方法 def 方法名(参数:参数类型,参数:参数类型...):返回类型

2020-09-05 16:43:00

Scala系列14:scala继承,重写,super,类型推断等使用详解

0.Scala继承scala语言是支持面向对象编程的,我们也可以使用scala来实现继承,通过继承来减少重复代码。0.1定义语法scala和Java一样,使用extends关键字来实现继承 可以在子类中定义父类中没有的字段和方法,或者重写父类的方法 类和单例对象都可以从某个父类继承语法class/object 子类 extends 父类 { ..}Copy示例0.2示例 | 类继承 定义一个Person类,再定义一个Student类,继承自Person类

2020-09-04 20:10:57

Scala系列13:scala单例对象,main方法,伴生对象,apply方法等使用详解

0.单例对象scala中没有Java中的静态成员,我们想要定义类似于Java的static变量、static方法,就要使用到scala中的单例对象——object.0.1定义单例对象单例对象表示全局仅有一个对象(类似于Java static概念)在scala中定义单例对象和定义类很像,就是把class换成object 在object中定义的成员变量类似于Java的静态变量 可以使用object对象.成员变量或者对象 成员变量等方式直接引用成员变量0.1.1示例示例说明定义一个D

2020-09-04 15:20:29

Scala系列12:Scala主构造器与辅助构造器使用详解与演示

0.类的构造器 跟Java一样,当我们创建类对象的时候,会自动调用类的构造器。之前我们创建类对象没有显示调用构造器,那是因为之前使用的都是默认构造器,此外,Scala中构造器分为主构造器和辅助构造器。我们接下来要学习如何自定义构造器。 同样,跟Java/C++一样,Scala可以有任意多的构造器,在Scala里,有一个主构造器和任意多的辅助构造器。1.主构造器我们学习过,Java的构造器,有构造列表和构造代码块class Person { // 成...

2020-09-03 19:07:47

Scala系列11:Scala类与对象,成员方法与变量,修饰符等详解

0.类和对象scala是支持面向对象的,也有类和对象的概念。我们依然可以基于scala语言来开发面向对象的应用程序。0.1创建类和对象用法使用class来定义一个类 使用new来创建对象示例创建一个Person类,并创建它的对象步骤创建一个scala项目,并创建一个Object 添加main方法 创建类和对象实现在IDEA中创建项目,并创建一个Object(main方法必须放在Object中) 添加main方法 创建一个Person类object _01Cl

2020-09-03 17:08:38

Scala系列10:函数式编程groupBy与排序sorted详解

0.Scala函数式编程我们将来使用Spark/Flink的大量业务代码都会使用到函数式编程。下面这些事开发中常用的函数式编程。注意这些函数都是操作 Scala 集合的,一般会进行两类操作:转换操作(transformation )和行动操作(actions)(有些人喜欢叫他为聚合操作)。第一种操作类型将集合转换为另一个集合,第二种操作类型返回某些类型的值。遍历( foreach ) 映射( map ) 映射扁平化( flatmap ) 过滤( filter ) 是否存在( exists )

2020-09-02 19:09:51

Scala系列9:聚合操作reduce,filter,reduceLeft,reduceRight,fold的使用详解

0.Scala函数式编程我们将来使用Spark/Flink的大量业务代码都会使用到函数式编程。下面这些事开发中常用的函数式编程。注意这些函数都是操作 Scala 集合的,一般会进行两类操作:转换操作(transformation )和行动操作(actions)(有些人喜欢叫他为聚合操作)。第一种操作类型将集合转换为另一个集合,第二种操作类型返回某些类型的值。遍历( foreach ) 映射( map ) 映射扁平化( flatmap ) 过滤( filter ) 是否存在( exists )

2020-09-02 16:25:49

Scala系列8:函数式编程之map,flatten,flatmap的使用详解

0.Scala函数式编程我们将来使用Spark/Flink的大量业务代码都会使用到函数式编程。下面这些事开发中常用的函数式编程。注意这些函数都是操作 Scala 集合的,一般会进行两类操作:转换操作(transformation )和行动操作(actions)(有些人喜欢叫他为聚合操作)。第一种操作类型将集合转换为另一个集合,第二种操作类型返回某些类型的值。遍历( foreach ) 映射( map ) 映射扁平化( flatmap ) 过滤( filter ) 是否存在( exists )

2020-09-02 14:49:53

Scala系列7:函数式编程之foreach,forall的使用详解

0.Scala函数式编程我们将来使用Spark/Flink的大量业务代码都会使用到函数式编程。下面这些事开发中常用的函数式编程。遍历( foreach ) 映射( map ) 映射扁平化( flatmap ) 过滤( filter ) 是否存在( exists ) 排序( sorted 、 sortBy 、 sortWith ) 分组( groupBy ) 聚合计算( reduce ) 折叠( fold )1. foreach的使用详解【1.1语法结构】foreach(f

2020-09-02 11:23:03

Scala系列6:Scala中Array,BufferArray,元组,list,set,map等集合使用详解

Scala中集合类的序列有:数组,元组,列表,Set集,Map映射,其中数组,列表,Set,Map又分为可变和不可变两种。下面就此详细展开介绍使用。0.数组的使用详解scala中数组的概念是和Java类似,可以用数组来存放一组数据。scala中,有两种数组,一种是定长数组,另一种是变长数组。0.1 定长数组定长数组指的是数组的长度是不允许改变的。通过指定长度定义数组,语法格式如下:val/var 变量名 = new Array[元素类型](数组长度) //方式1:通过指定...

2020-09-01 17:09:25

Scala系列5:轻松搞定Scala中方法与函数的区别与使用

0.方法介绍一个类可以有自己的方法, scala中的方法和Java方法类似。 但scala与Java定义方法的语法是不一样的, 而且scala支持多种调用方式。1.定义方法2.方法参数 *默认参数 *带名参数 *变长参数3.方法返回值类型推断4.方法调用方式 *后缀调用法 *中缀调用法 *花括号调用法 *无括号调用法 0.1.定义方法定义方法的语法格式:

2020-09-01 10:59:48

Scala系列4:轻松搞定Scala中for,if,while,块表达式等

0.条件表达式 条件表达式一般就是if表达式, if表达式可以根据给定的条件是否满足, 根据条件的结果(真或假) 决定执行对应的操作。 scala条件表达式的语法和Java一样。0.1有返回值的if条件表达式尖叫提示:在scala中,跟Java不同, 条件表达式也是有返回值的scala> val sex = "male"sex: String = malescala> val result = if(sex == "male") 1 else 0result:...

2020-08-30 23:21:28

Scala系列3:轻松搞定Scala变量与数据类型,运算符等基础语法

0. Scala中的数据类型 因为Scala底层是Jvm,所以Scala和Java一样,有7种数值类型Byte、Char、Short、Int、Long、Float和Double(scala里无包装类型)和一个Boolean类型(都是大写的类型),其他Java支持的数据类型如String类型,Scala一般都支持。但是跟Java不同的是这些都是类,在Scala里并不刻意区分基本类型和引用类型。1.Scala中变量的使用与演示1.1 scala中变量的使用1.在scala中, 可以...

2020-08-30 08:03:12

查看更多

CSDN身份
  • 博客专家
勋章 我的勋章
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 阅读者勋章Lv2
    阅读者勋章Lv2
    授予在CSDN APP累计阅读博文达到7天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 学习力
    学习力
    《原力计划【第二季】》第一期主题勋章 ,第一期活动已经结束啦,小伙伴们可以去参加第二期打卡挑战活动获取更多勋章哦。
  • 分享学徒
    分享学徒
    成功上传1个资源即可获取