scala
文章平均质量分 83
0x12A2A7F
探索数据宇宙.
展开
-
scala学习笔记 - 注解
什么可以被注解在scala中,可以为类、方法、字段、局部变量和参数添加注解,例如:@Entity class Credentials @Test def testSomeFeature() {} @BeanProperty var username = _def doSomething(@NotNull message: String) {}在给主构造器添加注解时,需要将注解放置在构造器之前,并加上一对圆括号(如果注解不带参数的话)。例如:class Credentials @Inj原创 2021-06-16 10:34:51 · 595 阅读 · 0 评论 -
sparkcore实现word count
spark core几种实现word count的方式(基于spark3.1.2和scala2.12.13):import org.apache.spark.{SparkConf, SparkContext}object WordCount { def main(args: Array[String]): Unit = { val conf = new SparkConf().setMaster("local[4]").setAppName("WordCount") val sc原创 2021-06-10 11:10:53 · 216 阅读 · 0 评论 -
scala学习笔记 - 隐式参数
隐式参数函数或方法可以带有一个标记为implicit的参数列表。在这种情况下,编译器将会查找默认值,提供给本次函数调用,以下是一个简单的示例:case class Delimiters(left: String, right: String) def quote(what: String)(implicit delims: Delimiters) delims.left + what + delims.right可以用一个显式的Delimiters对象来调用quote方法,就像这样:quo原创 2021-05-31 17:43:32 · 362 阅读 · 0 评论 -
scala学习笔记 - 隐式转换
隐式转换在Scala中,隐式转换函数(implicit conversion function)指的是那种以implicit关键字声明的带有单个参数的函数。正如它的名称所表达的那样,这样的函数将被自动应用,将值从一种类型转换为另一种类型。如下,有一个*方法用来将两个分数相乘,我们想把整数n转换成分数n / 1:implicit def int2Fraction(n: Int) = Fraction(n, 1)这样我们就可以做如下表达式求值:val result = 3 * Fraction(4,原创 2021-05-31 14:54:30 · 170 阅读 · 0 评论 -
scala学习笔记 - 高级类型(二)
自身类型特质可以要求混入它的类扩展自另一个类型,用自身类型(self type)的声明来定义特质:this: 类型 =>这样的特质只能被混入给定类型的子类当中。在如下示例中,LoggedException特质只能被混人扩展自 Expcetion的类:trait Logged { def log(msg: String) }trait LoggedException extends Logged{ this: Exception => def log(){ lo原创 2021-05-31 09:32:56 · 132 阅读 · 0 评论 -
scala学习笔记 - 高级类型(一)
单例类型给定任何引用v,你可以得到类型v.type,它有两个可能的值:v和null,这听上去像是一个挺古怪的类型,但它在有些时候很有用。首先,我们来看那种返回this的方法,通过这种方式你可以把方法调用串接起来:class Document { def setTitle(title: String) = { ... ; this } def setAuthor(author: String) = { ... ; this ) ...}然后,你就可以编写如下代码:val s =原创 2021-05-27 15:25:16 · 167 阅读 · 0 评论 -
scala学习笔记 - scala与java集合的互操作
JavaConversions对象提供了用于在Scala和Java集合之间来回转换的一组方法。给目标值显式地指定一个类型来触发转换 例如:import scala col lec ti JavaConversions._val props: scala.collection.mutable.Map[String, String] = System .getProperties()如果你担心那些不需要的隐式转换也被引人的话,只引入需要的即可 例如:import scala.collection.J原创 2021-05-24 13:46:09 · 525 阅读 · 1 评论 -
scala学习笔记 - 类型参数(二)
多重界定类型变量可以同时有上界和下界。写法为:T >: Lower <: Upper不能同时有多个上界或多个下界;不过,你依然可以要求一个类型实现多个特质,就像这样:T <: Comparable[T] with Serializable with Cloneable可以有多个上下文界定:T : Ordering : ClassTag类型约束类型约束提供给你的是另一个限定类型的方式,总共有三种关系可供使用:T =:= U // T是否等于UT <:<原创 2021-05-27 11:03:19 · 175 阅读 · 0 评论 -
scala学习笔记 - 类属性
Scala的类属性Scala类最简单的形式看上去和Java或C++中的很相似:class Demo1 { private var value = 0 // 必须初始化字段 def increment(): Unit = { // 方法默认是共有的 value += 1 } // def current(): Int = value def current: Int = value}调用无参方法(比如current时,可以写上圆括号,也可以写;?一般认为对于改值器方法原创 2021-05-17 11:15:52 · 378 阅读 · 1 评论 -
scala学习笔记 - 类构造器
scala类的构造器辅助构造器scala的类可以有任意多的辅助构造器。辅助构造器的名称为this。每一个辅助构造器都必须以一个对先前已定义的其他辅助构造器或主构造器的调用开始。如下:class Demo { private var name: String = _ private var age = 0 def this(name: String) { this() // 调用主构造器 this.name = name } def this(name:原创 2021-05-17 15:34:18 · 307 阅读 · 0 评论 -
scala学习笔记 - 特质
特质当接口使用Scala的特质可以像Java的接口那样工作,如下:trait Logger { def log(msg: String) // 定义一个抽象方法}无需使用abstract声明,特质中没有实现的方法默认就是抽象方法。子类可以实现,如下:class ConsoleLogger extends Logger {// override def log(msg: String): Unit = println(msg) // 也可以 def log(msg: String):原创 2021-05-19 16:42:29 · 136 阅读 · 0 评论 -
scala学习笔记 - 高阶函数
作为值的函数在Scala中,函数是“头等公民”,就和数字一样。你可以在变量中存放函数:scala> import scala.math._import scala.math._scala> val num = 3.14num: Double = 3.14scala> val fun = ceil _fun: Double => Double = <function1>scala> fun(num)res0: Double = 4.0从技术原创 2021-05-21 15:05:49 · 257 阅读 · 0 评论 -
scala学习笔记 - 模式匹配和样例类(一)
认识match var sign = 0 val ch: Char = '-' ch match { case '+' => sign = 1 case '-' => sign = -1 case _ => sign = 0 }与default等效的是捕获所有的case _模式。有这样一个捕获所有的模式是有好处的,否则,如果没有模式能匹配,代码会抛出MatchError。与switch语句不同,Scala模式匹配并不原创 2021-05-24 17:50:24 · 153 阅读 · 0 评论 -
scala学习笔记 - 模式匹配和样例类(二)
样例类样例类是一种特殊的类,它们经过优化以被用于模式匹配;在本例中,有两个扩展自常规(非样例)类的样例类:abstract class Amountcase class Dollar(value : Double) extends Amountcase class Currency (value : Double , unit: String) extends Amount你也可以有针对单例的样例对象:case object Nothing extends Amount当我们有一个类型为A原创 2021-05-25 13:44:18 · 212 阅读 · 1 评论 -
scala学习笔记 - 类型参数(一)
泛型类类和特质可以带类型参数,Scala中,我们用方括号来定义类型参数,例如:class Pair[T, S](val first: T, val second: S)以上将定义一个带有两个类型参数T和S的类。在类的定义中,你可以用类型参数来定义变量、方法参数、以及返回值的类型。Scala会从构造参数推断出实际类型:val p = new Pair(30, "aaaa") // 这是一个Pair[Int, String]你也可以自己指定类型:val p2 = new Pair[Any, A原创 2021-05-26 17:39:41 · 192 阅读 · 0 评论