Scala
基本语法
1.区分大小写
2.类名中所有单词首字母大写
3.方法名称除了第一个单词,首字母都要大写
4.程序名应与对象名一致
变量声明:var myVar=10; //尽量初始化,否则要定义类型,并new或者 = _
常量声明:val myVal="Hello scala";
也可以声明元组:val pair=(2019,"scala");
访问修饰符
Private:只有包含该成员的类或者对象的内部可以使用
Protected:允许子类使用
public: 任何地方
方法与函数
方法是类的一部分
函数是一个对象可以赋值给一个变量
val定义函数
def定义方法
对于交互式编程:
class Test{ def m(x: Int) = x + 3 //方法。 调用方法:m(10) val f = (x: Int) => x + 3 //函数。 调用方法:f(10) }
对于编写一个a+b的方法
object Test { def main(args: Array[String]) { println( "Returned Value : " + addInt(5,7) ); } def addInt( a:Int, b:Int ) : Int = { var sum:Int = 0 sum = a + b return sum } }
👆代码中没有分号是正常行为,同一行中最后一个分号可以省略
字符串
默认为String,和java一样是不可变的,(如果要改变,会自动生成新的对象),与之相对的是String Builder
val buf = new StringBuilder; buf += 'a' //加一个字符 buf ++= "bcdef" //加一个字符串
获取长度:length
连接两个字符串:concat
等等
数组
var z = new Array[String](3)
或 var z = new Array("Hello", "world")
遍历:
for( x <- z ){
println( x )
}
多维度
var z = ofDim[String](3,3)
集合
List/Set/Map/元组
var x = List(1,2,3,4)
var x = Set(1,3,5,7)
var x = Map("one" -> 1, "two" -> 2, "three" -> 3)
var x = (2019, "scala")
迭代器
it.next()返回迭代器下一个元素
it.hasNext()判断集合是否还有元素
it.max/it.min获取最大/最小
it.size/it.length获取元素的个数
等等
其中有很多关于集合的操作
.map() 可以把里面的内容按要求来变化例如. Map[String,List[String]].map(kv => (kv._1,kv._2.size))就换转化为Map[String,Int]
.filter() 按照要求来过滤 例如 Set[Int].filter(v => v>100) 过滤出大于100的值
.groupBy() 按要求分组 例如 List[(String,Int)].groupBy(x => x._1) 按照String转化为 Map[String,List[(String,Int)]]
scala中多线程
可以多次创建线程,类是 extends Thread
对于生产者消费者可以用BlockingQueue,(有阻塞与抛异常的操作)
我们可以设定queue的大小,然后没有空间或者资源,就让其阻塞即可
对于需要公用的也可以用synchronized来进行同步
也可以设置线程池,产生future=Future[]的类型,当future andThen产生结果时,case出Success和Failure两种类型