Scala
BigMoM1573
淡泊名利
展开
-
Scala>Akka简介
Akka基于Actor模型,提供了一个用于构建可扩展的(Scalable)、弹性的(Resilient)、快速响应的(Responsive)应用程序的平台。Actor模型:在计算机科学领域,Actor模型是一个并行计算(Concurrent Computation)模型,它把actor作为并行计算的基本元素来对待:为响应一个接收到的消息,一个actor能够自己做出一些决策,如创建更多的actor...原创 2020-04-06 23:33:55 · 200 阅读 · 0 评论 -
Scala>scala隐式转换和隐式参数
文章目录隐式转换隐式参数隐式转换方法作用域与导入隐式转换的时机隐式转换和隐式参数案例隐式转换Scala提供的隐式转换和隐式参数功能,是非常有特色的功能。是Java等编程语言所没有的功能。它可以允许你手动指定,将某种类型的对象转换成其他类型的对象或者是给一个类增加方法。通过这些功能,可以实现非常强大、特殊的功能。Scala的隐式转换,其实最核心的就是定义隐式转换方法,即implicit con...原创 2020-04-06 23:31:39 · 211 阅读 · 0 评论 -
Scala>scala高阶函数
文章目录高阶函数作为值的函数匿名函数柯里化闭包高阶函数概念Scala混合了面向对象和函数式的特性,我们通常将可以作为参数传递到方法中的表达式叫做函数。在函数式编程语言中,函数是“头等公民”,高阶函数包含:作为值的函数、匿名函数、闭包、柯里化等等。作为值的函数可以像任何其他数据类型一样被传递和操作的函数,每当你想要给算法传入具体动作时这个特性就会变得非常有用。定义函数时格式:val ...原创 2020-04-06 23:14:37 · 170 阅读 · 0 评论 -
Scala>Actor介绍
文章目录Actor介绍Java并发编程的问题Actor并发编程模型Java并发编程对比Actor并发编程创建ActorActor程序运行流程发送消息/接收消息持续接收消息使用loop和react优化接收消息发送和接收自定义消息Actor介绍scala的Actor并发编程模型可以用来开发比Java线程效率更高的并发程序。我们学习scala Actor的目的主要是为后续学习Akka做准备。Jav...原创 2020-04-06 23:06:49 · 377 阅读 · 0 评论 -
Scala>scala泛型
文章目录泛型定义一个泛型方法泛型类上下界上界定义下界协变、逆变、非变非变协变逆变泛型scala和Java一样,类和特质、方法都可以支持泛型。我们在学习集合的时候,一般都会涉及到泛型。scala> val list1:List[String] = List("1", "2", "3")list1: List[String] = List(1, 2, 3)那如何自己定义泛型呢?定...原创 2020-04-06 22:37:40 · 420 阅读 · 0 评论 -
Scala>scala提取器(Extractor)
提取器(Extractor)我们之前已经使用过scala中非常强大的模式匹配功能了,通过模式匹配,我们可以快速匹配样例类中的成员变量。例如:// 1. 创建两个样例类case class Person(name:String, age:Int)case class Order(id:String)def main(args: Array[String]): Unit = { ...原创 2020-04-06 22:23:51 · 308 阅读 · 0 评论 -
Scala>scala异常处理
异常处理来看看下面一段代码。 def main(args: Array[String]): Unit = { val i = 10 / 0 println("你好!") }Exception in thread "main" java.lang.ArithmeticException: / by zero at ForDemo$.main(ForDemo.s...原创 2020-04-06 22:18:40 · 380 阅读 · 0 评论 -
Scala>scala正则表达式
正则表达式在scala中,可以很方便地使用正则表达式来匹配数据。定义Regex类scala中提供了Regex类来定义正则表达式要构造一个RegEx对象,直接使用String类的r方法即可建议使用三个双引号来表示正则表达式,不然就得对正则中的反斜杠来进行转义val regEx = """正则表达式""".rfindAllMatchIn方法使用findAllMatchIn方法...原创 2020-04-06 22:13:46 · 249 阅读 · 0 评论 -
Scala>scala 偏函数
偏函数偏函数可以提供了简洁的语法,可以简化函数的定义。配合集合的函数式编程,可以让代码更加优雅。定义偏函数被包在花括号内没有match的一组case语句是一个偏函数偏函数是PartialFunction[A, B]的一个实例A代表输入参数类型B代表返回结果类型示例一定义一个偏函数,根据以下方式返回输入返回值1一2二3三其他其他...原创 2020-04-06 21:43:45 · 158 阅读 · 0 评论 -
Scala>Option类型
Option类型使用Option类型,可以用来有效避免空引用(null)异常。也就是说,将来我们返回某些数据时,可以返回一个Option类型来替代。定义scala中,Option类型来表示可选值。这种类型的数据有两种形式:Some(x):表示实际的值None:表示没有值使用getOrElse方法,当值为None是可以指定一个默认值示例一定义一个两个数相除的方法,使用Opt...原创 2020-04-06 21:29:26 · 205 阅读 · 0 评论 -
Scala>scala模式匹配
文章目录模式匹配简单模式匹配匹配类型守卫匹配样例类匹配集合匹配数组匹配列表匹配元组变量声明中的模式匹配示例 | 获取数组中的元素示例 | 获取List中的数据模式匹配scala中有一个非常强大的模式匹配机制,可以应用在很多场景:1.switch语句2.类型查询3.使用模式匹配快速获取数据简单模式匹配在Java中,有switch关键字,可以简化if条件判断语句。在scala中,可以...原创 2020-04-06 21:25:25 · 473 阅读 · 0 评论 -
Scala>scala样例对象
文章目录样例对象示例 | 定义枚举样例对象它主要用在两个地方:1.定义枚举2.作为没有任何参数的消息传递(后面Akka编程会讲到)定义使用case object可以创建样例对象。样例对象是单例的,而且它没有主构造器语法格式case object 样例对象名示例 | 定义枚举需求定义一个性别Sex枚举,它只有两个实例(男性——Male、女性——Female)创建...原创 2020-04-06 21:11:06 · 153 阅读 · 0 评论 -
Scala>scala样例类
文章目录样例类定义样例类示例 | 定义一个样例类示例 | 可变成员变量样例类的方法apply方法toString方法equals方法hashCode方法copy方法样例类样例类是一种特殊类,它可以用来快速定义一个用于保存数据的类(类似于Java POJO类),在后续要学习并发编程和spark、flink这些框架也都会经常使用它。定义样例类语法格式case class 样例类名([var/...原创 2020-04-06 21:01:01 · 191 阅读 · 0 评论 -
Scala>scala特质(trait)
文章目录特质(trait)trait作为接口使用示例 | 继承单个trait示例 | 继承多个trait示例 | object继承trait特质 | 定义具体的方法trait中定义具体的字段和抽象的字段使用trait实现模板模式对象混入traittrait实现调用链模式责任链模式trait调用链trait继承class特质(trait)scala中没有Java中的接口(interface),替...原创 2020-04-06 20:35:06 · 565 阅读 · 0 评论 -
Scala>scala匿名内部类
匿名内部类匿名内部类是没有名称的子类,直接用来创建实例对象。Spark的源代码中有大量使用到匿名内部类。scala中的匿名内部类使用与Java一致。定义 语法val/var 变量名 = new 类/抽象类 { // 重写方法}示例说明1.创建一个Person抽象类,并添加一个sayHello抽象方法2.添加main方法,通过创建匿名内部类的方式来实现Person3.调...原创 2020-04-06 20:07:42 · 392 阅读 · 0 评论 -
Scala>scala抽象类
文章目录抽象类定义抽象方法抽象字段抽象类和Java语言一样,scala中也可以定义抽象类定义如果类的某个成员在当前类中的定义是不包含完整的,它就是一个抽象类不完整定义有两种情况:1.方法没有方法体(抽象方法)2.变量没有初始化(抽象字段)定义抽象类和Java一样,在类前面加上abstract关键字// 定义抽象类abstract class 抽象类名 { // 定义抽象...原创 2020-04-06 17:27:47 · 445 阅读 · 0 评论 -
Scala>scala类型判断
文章目录类型判断isInstanceOf/asInstanceOfgetClass和classOf类型判断有时候,我们设计的程序,要根据变量的类型来执行对应的逻辑。在scala中,如何来进行类型判断呢?有两种方式:isInstanceOfgetClass/classOfisInstanceOf/asInstanceOf在Java中,可以使用instanceof关键字来判断类型...原创 2020-04-06 17:18:46 · 742 阅读 · 0 评论 -
Scala>override和super
类似于Java语言, 在子类中使用override需要来重写父类的成员,可以使用super来引用父类用法子类要覆盖父类中的一个方法,必须要使用override关键字使用override来重写一个val字段使用super关键字来访问父类的成员方法示例定义一个Person类,包含姓名字段(不可重新赋值)获取姓名方法定义一个Student类重写姓名字段重写获取姓名方法,返回"...原创 2020-04-06 17:13:41 · 136 阅读 · 0 评论 -
Scala>scala继承
文章目录继承示例 | 类继承示例 | 单例对象继承继承scala语言是支持面向对象编程的, 可以使用scala来实现继承,通过继承来减少重复代码。定义语法使用extends关键字来实现继承可以在子类中定义父类中没有的字段和方法,或者重写父类的方法类和单例对象都可以从某个父类继承语法class/object 子类 extends 父类 { ..}示例 | 类继承...原创 2020-04-06 17:07:39 · 118 阅读 · 0 评论 -
Scala>scala 伴生对象
文章目录伴生对象定义伴生对象private[this]访问权限伴生对象在Java中,经常会有一些类,同时有实例成员又有静态成员。例如:public class CustomerService { private static String SERVICE_NAME = "CustomerService"; public void save() { // 保...原创 2020-04-06 17:04:14 · 149 阅读 · 0 评论 -
Scala>scala单例对象
文章目录单例对象定义单例对象在单例对象中定义成员方法工具类案例main方法定义main方法实现App Trait来定义入口单例对象scala中没有Java中的静态成员,若想要定义类似于Java的static变量、static方法,就要使用到scala中的单例对象——object.定义单例对象单例对象表示全局仅有一个对象(类似于Java static概念)定义单例对象和定义类很像,就是...原创 2020-04-06 16:53:12 · 525 阅读 · 0 评论 -
Scala>scala类的构造器
文章目录类的构造器主构造器辅助构造器类的构造器当创建类对象的时候,会自动调用类的构造器。之前使用的都是默认构造器。主构造器Java的构造器,有构造列表和构造代码块class Person { // 成员变量 private String name; private Integer age; // Java构造器 public Person(String ...原创 2020-04-06 16:47:26 · 220 阅读 · 0 评论 -
Scala>scala类和对象
文章目录类和对象创建类和对象定义和访问成员变量使用下划线初始化成员变量定义成员方法访问修饰符类和对象scala是支持面向对象的,也有类和对象的概念。我们依然可以基于scala语言来开发面向对象的应用程序。创建类和对象用法使用class来定义一个类 new来创建对象参考代码object _01ClassDemo { // 创建类 class Person{} def mai...原创 2020-04-06 16:41:11 · 319 阅读 · 0 评论 -
Scala>scala映射
文章目录映射不可变Map可变MapMap基本操作iterator迭代器映射Map可以称之为映射。它是由键值对组成的集合。在scala中,Map也分为不可变Map和可变Map。不可变Map语法val/var map = Map(键->值, 键->值, 键->值...) // 推荐,可读性更好val/var map = Map((键, 值), (键, 值), (键, 值...原创 2020-04-06 16:23:40 · 330 阅读 · 0 评论 -
Scala>scala 集
SetSet(集)是代表没有重复元素的集合。Set具备以下性质:1.元素不重复2.不保证插入顺序scala中的集也分为两种,一种是不可变集,另一种是可变集。不可变集语法创建一个空的不可变集,语法格式:val/var 变量名 = Set[类型]()给定元素来创建一个不可变集,语法格式:val/var 变量名 = Set(元素1, 元素2, 元素3...)示例一定义一个...原创 2020-04-06 15:30:17 · 76 阅读 · 0 评论 -
Scala>scala列表
文章目录列表定义可变列表可变列表操作列表常用操作判断列表是否为空拼接两个列表获取列表的首个元素和剩余部分反转列表获取列表前缀和后缀扁平化(压平)拉链与拉开转换字符串生成字符串并集列表列表是scala中最重要的、也是最常用的数据结构。List具备以下性质:可以保存重复的值有先后顺序在scala中,也有两种列表,一种是不可变列表、另一种是可变列表定义不可变列表就是列表的元素、长度都...原创 2020-04-06 15:21:27 · 674 阅读 · 0 评论 -
Scala>scala元组
文章目录元组定义元组访问元组元组元组可以用来包含一组不同类型的值。例如:姓名,年龄,性别,出生年月。元组的元素是不可变的。定义元组使用括号来定义元组val/var 元组 = (元素1, 元素2, 元素3....)使用箭头来定义元组(元组只有两个元素)val/var 元组 = 元素1->元素2参考代码scala> val a = ("zhangsan", ...原创 2020-04-06 14:46:46 · 141 阅读 · 0 评论 -
Scala>scala数组
文章目录数组定长数组变长数组添加/修改/删除元素遍历数组数组常用算法数组scala中,有两种数组,一种是定长数组,另一种是变长数组定长数组定长数组指的是数组的长度是不允许改变的数组的元素是可以改变的语法# 通过指定长度定义数组val/var 变量名 = new Array[元素类型](数组长度)# 用元素直接初始化数组val/var 变量名 = Array(元素1, 元素...原创 2020-04-06 14:40:42 · 296 阅读 · 0 评论 -
Scala>scala函数
文章目录函数定义函数方法和函数的区别方法转换为函数函数scala支持函数式编程,将来编写Spark/Flink程序中,会大量使用到函数定义函数语法val 函数变量名 = (参数名:参数类型, 参数名:参数类型....) => 函数体函数是一个对象(变量)类似于方法,函数也有输入参数和返回值函数定义不需要使用def定义无需指定返回值类型参考代码scala> ...原创 2020-04-06 14:24:18 · 91 阅读 · 0 评论 -
Scala>scala方法
文章目录定义方法返回值类型推断方法参数默认参数带名参数变长参数方法调用方式后缀调用法中缀调用法花括号调用法无括号调用法一个类可以有自己的方法,scala中的方法和Java方法类似。但scala与Java定义方法的语法是不一样的。定义方法语法def methodName (参数名:参数类型, 参数名:参数类型) : [return type] = { // 方法体:一系列的代码}...原创 2020-04-06 01:30:43 · 108 阅读 · 0 评论 -
Scala>break和continue
scala中,没有break/continue关键字如果一定要使用break/continue,就需要使用scala.util.control包的Break类的breable和break方法。实现break用法导入Breaks包import scala.util.control.Breaks._使用breakable将for表达式包起来for表达式中需要退出循环的地方,添加bre...原创 2020-04-06 01:15:22 · 90 阅读 · 0 评论 -
Scala>scala循环
在scala中,可以使用for和while,但一般推荐使用for表达式,因为for表达式语法更简洁for表达式语法for(i <- 表达式/数组/集合) { // 表达式}简单循环使用for表达式打印1-10的数字参考代码1scala> val nums = 1.to(10) ...原创 2020-04-06 01:12:08 · 200 阅读 · 0 评论 -
Scala>scala条件表达式
条件表达式就是if表达式。scala条件表达式的语法和Java一样。有返回值的if参考代码scala> val sex = "male"sex: String = malescala> val result = if(sex == "male") 1 else 0result: Int = 1与Java不一样的是,在scala中,条件表达式也是有返回值的在sc...原创 2020-04-06 00:56:18 · 581 阅读 · 1 评论 -
Scala>scala数据类型与操作符
scala中的类型以及操作符绝大多数和Java一样数据类型基础类型类型说明Byte8位带符号整数Short16位带符号整数Int32位带符号整数Long64位带符号整数Char16位无符号Unicode字符StringChar类型的序列(字符串)Float32位单精度浮点数Double64位双精度浮点数Bool...原创 2020-04-06 00:51:59 · 174 阅读 · 0 评论 -
Scala>scala字符串
scala提供多种定义字符串的方式,将来我们可以根据需要来选择最方便的定义方式。使用双引号使用插值表达式使用三引号使用双引号语法val/var 变量名 = “字符串”参考代码val name="hadoop6"scala> println(name + name.length)hadoop6使用插值表达式插值表达式可以有效避免大量字符串的拼接。语法val/...原创 2020-04-06 00:43:06 · 90 阅读 · 0 评论 -
Scala>scala声明变量
语法格式Java变量定义int a = 0;在scala中,可以使用val或者var来定义变量,语法格式如下:val/var 变量标识:变量类型 = 初始值其中val定义的是不可重新赋值的变量var定义的是可重新赋值的变量scala中定义变量类型写在变量名后面scala的语句最后不需要添加分号定义一个变量示例:定义一个变量保存一个人的名字"tom"参考代码scal...原创 2020-04-06 00:34:56 · 502 阅读 · 0 评论 -
Scala>scala解释器
后续我们会使用scala解释器来学习scala基本语法,scala解释器像Linux命令一样,执行一条代码,马上就可以让我们看到执行结果,用来测试比较方便。启动scala解释器要启动scala解释器,只需要以下几步:按住windows键 + r输入scala即可执行scala代码在scala的命令提示窗口中输入println(“hello, world”),回车执行退出解释器...原创 2020-04-06 00:20:15 · 230 阅读 · 0 评论 -
Scala>Scala开发环境安装
文章目录Scala开发环境安装安装JDK安装scala SDK安装IDEA scala插件Scala开发环境安装学习如何编写scala代码之前,需要先安装scala编译器以及开发工具Java程序编译执行流程Scala程序编译执行流程scala程序运行需要依赖于Java类库,必须要有Java运行环境,scala才能正确执行根据上述流程图,要编译运行scala程序,需要jdk(jv...原创 2020-04-06 00:16:00 · 169 阅读 · 1 评论 -
Scala>Scala简介
scala简介scala是运行在JVM上的多范式(多种编程方法)编程语言,同时支持面向对象和面向函数编程早期,scala刚出现的时候,并没有怎么引起重视,随着Spark和Kafka这样基于scala的大数据框架的兴起,scala逐步进入大数据开发者的眼帘。scala的主要优势是它的表达性。为什么使用scala开发大数据应用程序(Spark程序、Flink程序)表达能力强,一行代码抵得上...原创 2020-04-06 00:02:29 · 100 阅读 · 0 评论