1."RichString.java".stripSuffix(".java") == "RichString"

"http://my.url.com".stripPrefix("http://") == "my.url.com"

2.Scala中,访问修饰符可以通过使用限定词强调。格式为:private[x] 或 protected[x],这里的x指代某个所属的包、类或单例对象。如果写成private[x],读作"这个成员除了对[…]中的类或[…]中的包中的类及它们的伴生对像可见外,对其它所有类都是private。这种技巧在横跨了若干包的大型项目中非常有用,它允许你定义一些在你项目的若干子包中可见但对于项目外部的客户却始终不可见的东西。

3.保护(Protected)成员

在 scala 中,对保护(Protected)成员的访问比 java 更严格一些。因为它只允许保护成员在定义了该成员的的类的子类中被访问。而在java中,用protected关键字修饰的成员,除了定义了该成员的类的子类可以访问,同一个包里的其他类也可以进行访问。

公共(Public)成员

Scala中,如果没有指定任何的修饰符,则默认为 public。这样的成员在任何地方都可以被访问。

私有(Private)成员

用private关键字修饰,带有此标记的成员仅在包含了成员定义的类或对象内部可见,同样的规则还适用内部类。

4.@transient注解将字段标记为瞬态的,瞬态的字段不会被序列化,这对于需要临时保存的缓存数据,或者是能够很容易地重新计算的数据而言是合理的。

5.isAssignableFrom 是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的超类或接口。 通常调用格式是:Class1.isAssignableFrom (Class2)

而instanceof 是用来判断一个对象实例是否是一个类或接口的或其子类子接口的实例。

6.编译器可以自动插入 implicit 的最后一个用法是隐含参数。 比如编译器在需要是可以把 someCall(a)修改为 someCall(a)(b)或者 new someClass(a) 修改为 new SomeClass(a)(b),也就是说编译器在需要的时候会自动补充缺少的参数来完成方法的调用。其中(b)为一组参数,而不仅仅只最后一个参数。这里更详细

7.import java.util.concurrent.atomic.AtomicInteger

new AtomicInteger(0).getAndIncrement()获取自增的id

8.class A {def method1: A = this } class B extends A (def method2: B = this} val b = new B

如果调用b.method2.method1是可以的,但是如果想调用b.method1.method2就不行了。因为method1返回的是A类型的。

当然你可以在B中覆盖method1,以返回正确类型。但是scala中解决这个问题的办法就是this.type

class A { def method1: this.type = this } class B extends A { def method2: this.type = this } val b = new B

如果调用b.method1则编译器会知道method1返回的是B类型的。

9.ConcurrentHashMap是线程安全的,适合并发操作。

10.在Scala中并没有枚举类型,但在标准类库中提供了Enumeration类来产出枚举。扩展Enumeration类后,调用Value方法来初始化枚举中的可能值。

内部类Value实际上是一个抽象类,真正创建的是Val。因为实际上是Val,所以可以为Value传入id和name

如果不指定,id就是在前一个枚举值id上加一,name则是字段名,链接

11.scala product2,product1

12.reflect.classTag[V].runtimeClass.getName反射获取类名

13.Scala中的Either的两个子类(Left,Right)的简单用法

14.implicitly[ClassTag[T]]

15.要求require和断言(assert)

要求(require)和断言(assert)都起到可执行文档的作用。两者都在类型系统不能表达所要求的不变量(invariants)的场景里有用。 assert用于代码假设的不变量(invariants) (内部或外部的) 例如:(译注,不变量 invariant 是指类型不可变,即不支持协变或逆变的类型变量)

val stream = getClass.getResourceAsStream("someclassdata")

assert(stream != null)

相反,require用于表达API契约:

def fib(n: Int) = { require(n > 0) ... }

16.Scala NonFatal

17.Just use Java's java.lang.ThreadLocal class to store the variables.

val tl = new ThreadLocal[String]
tl.set("fish")
tl.get // "fish"

18.Spark 闭包中ClosureCleaner操作

19.AtomicBoolean 在这个Boolean值的变化的时候不允许在之间插入,保持操作的原子性。这个方法主要两个作用

1. 比较AtomicBoolean和expect的值,如果一致,执行方法内的语句。其实就是一个if语句

2. 把AtomicBoolean的值设成update 比较最要的是这两件事是一气呵成的,这连个动作之间不会被打断,任何内部或者外部的语句都不可能在两个动作之间运行。为多线程的控制提供了解决的方案

20.implicit ord: Ordering[T] = null

case class Person(name:String,tel:String) extends Ordered[Person] {
def compare(that: Person): Int = this.name compare that.name
}
val ps5 = Array(Person("peter","138"),Person("peter","55"),Person("john","138"))
sc.parallelize(ps5).distinct.collect。详细解释

21.

Scala中的=>符号可以看做是创建函数实例的语法糖。例如:A => T,A,B => T表示一个函数的输入参数类型是“A”,“A,B”,返回值类型是T。请看下面这个实例:

val f: Int => String = myInt => "The value of myInt is: " + myInt.toString()

f: Int => String = <function1>

println(f(3))

The value of myInt is: 3

上面例子定义函数f:输入参数是整数类型,返回值是字符串。

另外,() => T表示函数输入参数为空,而A => Unit则表示函数没有返回值

22.

scala>val input = List(3, 5, 7, 11)

scala> input.scanLeft(0)(_+_)

res0: List[Int] = List(0, 3, 8, 15, 26)

23.scala flatten

flatten可以把嵌套的结构展开.

scala> List(List(1,2),List(3,4)).flatten
res0: List[Int] = List(1, 2, 3, 4)

24。asScala

25.AtomicReference

java并发库提供了很多原子类来支持并发访问的数据安全性,除了常用的

AtomicInteger、AtomicBoolean、AtomicLong 外还有
AtomicReference 用以支持对象的原子操作:AtomicReference<V> 可以封装引用一个V实例,
通过
public final boolean compareAndSet(V expect, V update)
可以支持并发访问,set的时候进行对比判断,如果当前值和操作之前一样则返回false,否则表示数据没有 变化,例如下面的代码
使用 AtomicReference 实现了并发计数。这里

26.

看scala的源码的话很发现很多源码开头都有一句:self => 这句相当于给this起了一个别名为self。

self不是关键字,可以用除了this外的任何名字命名(除关键字)。就上面的代码,在Self 内部,可以用this指代当前对象,也可以用self指代,两者是等价的。这里

class Self {
self => //代表this指针 ,也就是说 self 就 this的别名
val tmp = "scala"
def foo = self.tmp + this.tmp
}

27

定长数组:指长度不可变的数组Array。

第一种方式:
先声明一个数组,后初始化该数组:
scala> val array = new Array[Double](5)
array: Array[Double] = Array(0.0, 0.0, 0.0, 0.0, 0.0)
赋值方式:array(index) = value
第二种方式:
scala> val array = Array(1, 2, 3, 4, 5)
array: Array[Int] = Array(1, 2, 3, 4, 5)
第三种方式,Array.fill(length)(value):
scala> val array = Array.fill(5)(3.5)
array: Array[Double] = Array(3.5, 3.5, 3.5, 3.5, 3.5)
如果fill第二个参数只写一个值的话,那么该数组的所有元素都是该值,但是如果第二个参数是一个iterator或者random,那么数组就会被赋值为它们的值。
scala> val array = Array.fill(2)(math.random)
array: Array[Double] = Array(0.2810736748034083, 0.7261142068882558)
第四种方式,ofDim[T](length):
scala> val array = Array.ofDim[Double](5)
array: Array[Double] = Array(0.0, 0.0, 0.0, 0.0, 0.0)
赋值方式:array(index) = value
28

Either解决返回值不确定问题(两个值返回一个)

程序设计中经常会有这样的需求,一个函数(或方法)在传入不同参数时会返回不同的值。返回值是两个不相关的类型,分别为: Left 和 Right 。惯例中我们一般认为 Left 包含错误或无效值, Right包含正确或有效值。除了使用match case方式来获取数据,我们还可以分别使用 .right.get 和 .left.get 方法,当然你需要使用 .isRight 或 .isLeft 先判断一下。Left或Right类型也有 filter, flatMap, foreach, get, getOrElse, map 方法,它们还有toOption, toSeq 方法,分别返回一个Option或Seq 。

29

Seq 特质有两个子特质 LinearSeq 和 IndexedSeq。他们并没有增加任何新的操作,只是为Seq中的一些方法提供了更高效的实现: LinearSeq (线性序列)提供了高效的 head 和 tail 方法,而 IndexedSeq(索引序列) 提供了高效的 apply、length 和 update 方法(当集合可变时)。常用的线性序列类的集合有 scala.collection.immutable.List 和 scala.collection.immutable.Stream。常用的索引序列类的集合有 scala.Array 以及 scala.collection.mutable.ArrayBuffer。

Scala的常用小技巧的更多相关文章

  1. Matlab常用小技巧及部分快捷键

    Matlab常用小技巧一: 1. m文件如果是函数,保存的文件名最好与函数名一致,这点都很清楚.不过容易疏忽的是,m文件名的命名尽量不要是简单的英文单词,最好是由大小写英文/数字/下划线等组成.原因是 ...

  2. javascript的40个网页常用小技巧

    下面是javascript的40个网页常用小技巧,对网站开发人员相信会有帮助.1. oncontextmenu="window.event.returnValue=false" 将 ...

  3. HBase Shell Get 操作常用小技巧

    在工作中,有时候只是想简单看下HBase表某些关键指标的值,这个时候总不能现写Java代码去查看,以下几个小技巧你可能会经常用到. 1. 某行有许多列,只想获取指定2~3列的数据 hbase> ...

  4. 今天整理了几个在使用python进行数据分析的常用小技巧、命令。

    提高Python数据分析速度的八个小技巧 01 使用Pandas Profiling预览数据 这个神器我们在之前的文章中就详细讲过,使用Pandas Profiling可以在进行数据分析之前对数据进行 ...

  5. Visual Studio常用小技巧一:代码段+快捷键+插件=效率

    用了visual studio 5年多,也该给自己做下备忘录了.每次进新的组换新的电脑,安装自己熟悉的环境又得重新配置,不做些备忘老会忘记一些东西.工具用的好,效率自然翻倍. 1,代码段 在Visua ...

  6. 使用JavaScript在项目前台开发的58种常用小技巧

    oncontextmenu="return false" :禁止右键 onselectstart="return false" : 禁止选取 onpaste = ...

  7. PowerDesigner 的常用小技巧 转

    中小 订阅 修改外键命名规则 选择Database—>Edit Current DBMS选择Scripts->Objects->Reference->ConstName可以发现 ...

  8. iOS 知识-常用小技巧大杂烩

    原文链接:http://www.jianshu.com/p/7c3ee5e67d03. 自己看的. 1,打印View所有子视图 po [[self view]recursiveDescription] ...

  9. windows7实用快捷键 分类: windows常用小技巧 2014-04-18 14:34 169人阅读 评论(0) 收藏

    几个比较实用的快捷键 windows键:简写成win win+   方向键上下,可以使当前窗体放大或缩小 win+   方向键左右,可以使当前窗体悬靠在左边或右边 win+Home   仅保留当前窗体 ...

随机推荐

  1. mysql的配置和启动命令

    一.mysql配置文件在linux系统下的位置 使用命令查询位置: 1.找到安装位置 which mysql  -> /usr/bin/mysql 2.接下来就可以针对这个目录通过一些命令查看配 ...

  2. ajax:error:function (XMLHttpRequest, textStatus, errorThrown) 中status、readyState和textStatus状态意义

    textStatus: "timeout", 超时 "error", 出错 "notmodified" , 未修改 "parser ...

  3. HTTP&HTTPS

    主要参考文档:<图解HTTP> HTTP简介 什么是HTTP? HTTP:(HyperText Transfer Protocol),超文本传输协议,是一个基于请求和响应,无状态的,应用层 ...

  4. 24 | 紧跟时代步伐:微服务模式下API测试要怎么做?

  5. MySQL 全文索引实现简单版搜索引擎

    目录 前言 使用 三种类型的全文搜索方式 相关参数 测试innodb引擎使用全文索引 准备 使用默认方式创建全文索引 使用ngram分词解析器创建全文索引 结论 前言 只有Innodb和myisam存 ...

  6. kubernetes实战之部署一个接近生产环境的consul集群

    系列目录 前面我们介绍了如何在windows单机以及如何基于docker部署consul集群,看起来也不是很复杂,然而如果想要把consul部署到kubernetes集群中并充分利用kubernete ...

  7. MySQL5.7高版本 疑似内存泄露

    I have an instance running on mysql-5.7.19. However, I found that its physical memory and virtual me ...

  8. kd树原理及实现

    常用来作空间划分及近邻搜索,是二叉空间划分树的一个特例.通常,对于维度为k,数据点数为N的数据集,kd树适用于N≫2的k次方的情形. 1维数据的查询 假设在数据库的表格T中存储了学生的语文成绩chin ...

  9. QRowTable表格控件-支持hover整行、checked整行、指定列排序等

    目录 一.开心一刻 二.嘴一嘴 三.效果展示 四.浅谈实现 五.自定义数据源 1.data函数 2.flags函数 六.自定义视图 1.目的 2.问题分析 七.测试 八.相关文章 原文链接:QRowT ...

  10. 用JAVA打印出棱形

    public class Test { public static void main(String[] args) { //输入行数 print(5); } public static void p ...