![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Scala
文章平均质量分 51
dingyuanpu
QQ:d-y-p@qq.com
展开
-
scala进阶26-链式操作的背后
import sun.awt.AWTIcon32_java_icon24_pngobject Scalaclass Java1/** * 当子类创建对象是,调用method1,this即为子类对象 * 因此,调用method1后可以调用method2,实现了链式操作 */class JVM { def method1: this.type = this}class原创 2016-08-26 23:06:47 · 1099 阅读 · 0 评论 -
scala进阶1-泛型
import scala.reflect.ClassTag//定义带泛型的类class Triple[F, S, T](val first: F, val second: S, val third: T)object Test extends App{ val triple = new Triple("Spark", 3, 3.14) val bigData = new Trip原创 2016-08-05 23:01:57 · 454 阅读 · 0 评论 -
scala进阶2-类型变量界定Bounds
/** * 类型变量界定Bounds(上界、下界) * "<:"上界类型限定符,意思是限定T是Comparable[T]的子类 * Comarable表示可对比的,否则first是没有compareTo方法的 * @param first * @param second * @tparam T *///class Pair[T](val first: T, val s转载 2016-08-08 23:38:03 · 555 阅读 · 0 评论 -
scala进阶28-实现List高效遍历
object ListTest { def main(args: Array[String]): Unit = { val list = List(1, 3, 4, 5) increment(list) increment_MoreEffective(list) increment_MostEffective(list) } /** * 通过模原创 2016-08-30 00:50:46 · 6599 阅读 · 0 评论 -
Scala进阶27-List中的上界、下界、逆变、协变
abstract class Big_Dataclass Hadoop extends Big_Dataclass Spark extends Big_Data/** * ::是中值表达式 * def ::[B >: A] (x: B): List[B] = * new scala.collection.immutable.::(x, this) * A是以B为上界的,或者原创 2016-08-30 00:20:51 · 786 阅读 · 0 评论 -
scala进阶19-隐式转换内幕
import scala.io.Sourceimport java.io.Fileclass RicherFile(val file: File) { def read = Source.fromFile(file.getPath).mkString}class MyFile(path: String) extends File(path)object MyFile { im原创 2016-08-19 01:00:50 · 396 阅读 · 0 评论 -
scala进阶18-隐式对象
abstract class Template[T] { def add(x: T, y: T): T}abstract class SubTemplate[T] extends Template[T] { def unit: T}object Implicits_Object extends App{ implicit object StringAdd extends S原创 2016-08-19 00:22:43 · 320 阅读 · 0 评论 -
scala进阶17-隐式类/方法-增强类功能
import java.io.Fileimport scala.io.Source/** * 通过隐式转换增强类的功能 */class RichFile(val file: File) { def read = Source.fromFile(file.getPath).mkString}/** * 定义object,写明隐式转换(implicit) * 隐式转原创 2016-08-17 23:32:12 · 936 阅读 · 0 评论 -
scala进阶20-隐式转换至Ordered与Ordering
//Ordering是Ordering[T]隐式值class Pair_Implicits[T: Ordering](val first: T, val second: T) { def bigger(implicit ordered: Ordering[T]) = { if (ordered.compare(first, second) > 0) first else second原创 2016-08-18 23:13:34 · 1939 阅读 · 0 评论 -
scala进阶19-隐式参数+隐式转换
/** * 隐式参数+隐式转换 */object Implicit_Conversions_with_Implicit_Parameters { def main(args: Array[String]): Unit = { //ordered是一个变量,变量指向一个匿名函数,这个函数讲T转换成Ordered[T] def bigger[T](a: T, b: T)(原创 2016-08-18 00:34:26 · 322 阅读 · 0 评论 -
scala进阶18-隐式转换-隐式参数
/** * 隐式参数 */object Context_Implicits { implicit val default: String = "Java"}object Param { //编译器会检查谁是implicit的变量(全局范围内查找隐式值),如果有,会默认传递过来 def print(content: String) (implicit language:原创 2016-08-18 00:22:36 · 297 阅读 · 0 评论 -
scala基础38-foldLeft/foldRight/sortWith
object Test extends App{ //由初始值不停的向左执行f,结果5050 println((1 to 100).foldLeft(0)(_ + _)) //也可以这样写 println((0 /: (1 to 100))(_ + _)) //初始值在右侧,左侧元素不停的和右侧元素(第2次开始是结果)执行f println((1 to 5).foldRi原创 2016-08-03 00:52:57 · 854 阅读 · 0 评论 -
scala基础37-List高级方法
object Test extends App{ println(List(1, 2, 3, 4, 5).partition(_ % 2 == 0)) //find返回Option(Some或None),因为find可能找不到 println(List(1, 2, 3, 4, 5).find(_ % 2 == 0)) println(List(1, 2, 3, 4, 5).find原创 2016-08-03 00:28:14 · 332 阅读 · 0 评论 -
scala基础36-List的map/flatmap/filter等操作
object Test extends App{ println(List(1, 2, 3, 4, 6).map(_ + 1)) val data = List("Scala", "Hadoop", "Spark") println(data.map(_.length)) //mkString:将List转换为String,分隔符会去掉 println(data.map(_.原创 2016-08-02 23:29:21 · 2268 阅读 · 0 评论 -
scala进阶16-抽象类型
import scala.io.{BufferedSource, Source}/** * 用type关键字定义抽象类型 * 抽象类型可用在方法中 */trait Reader { type In <: java.io.Serializable //抽象类型限定为可序列化的(In的上界) type Contents def read(in: In): Contents原创 2016-08-17 00:32:42 · 323 阅读 · 0 评论 -
scala进阶15-依赖注入
/** * 依赖注入是指 依赖对象的创建,由第三方完成,而不是被依赖对象,我们将这种控制关系的转移,称为依赖注入或者控制反转。 * scala通过自身类型的限定实现依赖注入 */trait Logger { def log(msg: String) }trait Auth { //自身类型命名为auth,并且限定为Auth实例化时必须携带Logger auth: Logg原创 2016-08-17 00:11:23 · 1220 阅读 · 0 评论 -
scala进阶14-自身类型self type
/** * self不是关键字,是this的别名,具有更强的可读性,无代码中的outer => */class Self { self => val tmp = "Scala" def foo = self.tmp + this.tmp //可以用self和this访问自身成员}trait S1/** * 高级用法: * 1、如下所示,this:S1合在一起原创 2016-08-16 23:31:55 · 1802 阅读 · 0 评论 -
scala进阶13-中值表达式
/** * 中值表达式 */object Infix_Type { def main(args: Array[String]): Unit = { //函数名为>>: object Log { def >>: (data: String): Log.type = {println(data); Log}} //中值表达是是右结合的,其实是Log.>>:"Spa原创 2016-08-16 23:07:23 · 437 阅读 · 0 评论 -
scala进阶20-基于Actor多并发编程
import scala.actors.Actor/** * scala中基于actor实现并发编程,不共享数据,依赖消息传递 * pom文件中要引入scala-actors,否则找不到actors包 */object First_Actor extends Actor{ override def act: Unit = { println(Thread.current原创 2016-08-21 00:57:30 · 709 阅读 · 0 评论 -
scala进阶3-视图界定view bounds
dd原创 2016-08-08 23:41:00 · 845 阅读 · 0 评论 -
scala进阶4-上下文界定(Context)
/** * "[T: Ordering]" 上下文界定 */class Pair_Ordering[T: Ordering](val first: T, val second: T) { def bigger(implicit ordered: Ordering[T]) = { if (ordered.compare(first, second) > 0) first else原创 2016-08-10 00:52:30 · 1932 阅读 · 0 评论 -
scala进阶9-链式操作内幕
/** * scala中任何类都有一个type属性 * 通过this.type = this这样操作,breathe即可返回Cat类型的对象, * 因此可以进行链式操作 */class Animal { def breathe: this.type = this }class Cat extends Animal { def eat: this.type = this }o原创 2016-08-15 00:29:19 · 511 阅读 · 0 评论 -
scala进阶25-获取类型(类、对象、object、trait)
import scala.reflect.runtime.universe._class Sparktrait Hadoopobject Flinkclass Java { class Scala}/** * 实例获取类用getClass * 类获取用classOf */object Type_Advanced { def main(args: Array[S原创 2016-08-26 00:17:31 · 5914 阅读 · 0 评论 -
scala进阶24-提取器与模式匹配
/** * 定义析构器(解构器) * 析构的时候unapply回被调用 * 传入的是要匹配的对象,返回的是要匹配出来的具体内容(解构后的元素) */object :> { def unapply[A](list: List[A]) = { Some((list.init, list.last))//init是最后一个元素之前的元素 }}object Extr原创 2016-08-25 23:22:40 · 760 阅读 · 0 评论 -
scala进阶24-赋值语句与模式匹配
object Assinment_Internals { def main(args: Array[String]): Unit = { var a@b = 1000 //a是别名,b是个常量(a被绑定到b上),背后是模式匹配完成的 b += 1 //a = 1000, b = 1001 println("a = " + a + ", b = " + b) v原创 2016-08-25 23:02:15 · 1279 阅读 · 0 评论 -
scala进阶32-用for实现map、flattop、filter
object For_Advanced { def map1[A, B](list: List[A], f: A => B): List[B] = for(element <- list) yield f(element) def flatMap1[A, B](list: List[A], f: A => List[B]): List[B] = for(x <- li原创 2016-09-04 16:55:09 · 501 阅读 · 0 评论 -
scala进阶31-使用for做查询
case class Book(title: String, authors: List[String])object For_Query { def main(args: Array[String]): Unit = { val books: List[Book] = List ( Book("book1", List("a", "b")), Book("原创 2016-09-04 16:36:11 · 425 阅读 · 0 评论 -
scala进阶30-for的生成器、定义、过滤器
case class Person(name: String, isMale: Boolean, children: Person*)object For_expressive { def main(args: Array[String]): Unit = { val lauren = Person("Lauren", false) val rocky = Person("原创 2016-09-04 15:57:23 · 693 阅读 · 0 评论 -
scala进阶29-for的强大表达力
case class Person(name: String, isMale: Boolean, children: Person*)object For_expressive { def main(args: Array[String]): Unit = { val lauren = Person("Lauren", false) val rocky = Person("原创 2016-09-04 15:33:02 · 443 阅读 · 0 评论 -
scala进阶23-for与模式匹配
object For_Advanced { def main(args: Array[String]): Unit = { for (i <- List(1, 2, 3, 4, 5)) println(i) //index绑定了一个别名,叫Flink,内部是模式匹配,匹配到Flink后设置别名给index for(index@"Flink" <- List("Hado原创 2016-08-25 00:21:05 · 372 阅读 · 0 评论 -
scala进阶22-并发编程react、loop
import java.net.{InetAddress, UnknownHostException}import scala.actors.Actorimport scala.actors.Actor._/** * 1、在Actor类的act方法中,可以使用react方法来替代receive方法进行消息的处理, * 使用react方法的好处是可以在一个线程中执行多个Actor的原创 2016-08-24 23:51:29 · 591 阅读 · 0 评论 -
scala进阶8-型变:协变、逆变
/** * 形变:协变、逆变 */class Personclass Student extends Person//这里的+代表是协变,即如果A是B的子类,那么C[A]也是C[B]的子类//形变的子类也是可形变的class C[+T](val args: T)//这里的-表示逆变,和协变相反trait Friend[-T] { def makeFriend(some原创 2016-08-12 00:47:50 · 419 阅读 · 0 评论 -
scala进阶7-类型约束
object Type_Contraints { //A =:= B //表示A类型等同于B类型 //A <:< B //表示A类型是B类型的子类 //本函数包含一个隐式参数,限定T是指定类型 def rocky[T](i: T)(implicit env: T <:< java.io.Serializable): Unit = { println("hello")原创 2016-08-11 23:39:45 · 357 阅读 · 0 评论 -
scala进阶6-多重界定
/** * 多重界定 *///T是A或B的子类//T <: A with B//A或B是T的子类//T >: A with B//T是A的上界,B的下界//T >: A <: B//T必须同时满足存在A[T]和B[T]这样的隐式值//T: A: B//T必须同时满足能隐式转换成A和B//T <% A <% Bclass M_A[T]class M_B[T]原创 2016-08-11 22:42:10 · 586 阅读 · 0 评论 -
scala进阶22-case class消息传递
import scala.actors.Actorimport scala.actors.Actor._case class Person(name: String, age: Int)class HelloActor extends Actor { def act(): Unit = { while(true) { receive { case原创 2016-08-23 23:56:31 · 1272 阅读 · 0 评论 -
scala进阶5-classtag、typetag、manifest、classmanifest
import scala.reflect.ClassTagclass A[T]object Manifest_ClassTag { def main(args: Array[String]): Unit = { //通过Manifest这种上下文界定可以创建一个泛型数组 //Mainifest在运行时存储数组的具体类型,Mainifest实际上作为一个隐式的参数运行在上原创 2016-08-10 23:26:30 · 1959 阅读 · 0 评论 -
scala进阶21-actor之消息传递
import scala.actors.Actorimport scala.actors.Actor._object Actor_Messages extends Actor { def act(): Unit = { while(true) { receive ({ //偏函数 case msg => println("Message content原创 2016-08-23 00:39:04 · 777 阅读 · 0 评论 -
scala基础24-偏函数初探
object Test { def main(args: Array[String]): Unit = { def sum(a: Int, b: Int, c: Int) = a + b + c println(sum(1, 2, 3)) val fp_a = sum _ println(fp_a(1, 2, 3)) println(fp_a.app原创 2016-07-25 23:03:09 · 316 阅读 · 0 评论 -
scala基础35-Option
/* *Option类型用来表示一个值是可选的(有值或无值) *Option[T]是一个类型为T的可选值容器:如果值存在,Option[T]就是一个Some[T], *如果值不存在,Option[T]就是对象None *sealed abstract class Option[+A] extends Product with Serializable *sealed是封闭的,意思是继承与原创 2016-08-01 23:34:27 · 391 阅读 · 0 评论 -
scala基础34-List常用函数
object Test { def main(args: Array[String]): Unit = { println(List(1, 2, 3, 4) ::: List(4, 5, 6,7)) println(List(1, 2, 3, 4).length) //length性能慢 val bigData = List("Hadoop", "Spark", "kaf原创 2016-08-01 23:30:22 · 725 阅读 · 0 评论