Scala常用操作
原创
©著作权归作者所有:来自51CTO博客作者wx63086371c7e9c的原创作品,请联系作者获取转载授权,否则将追究法律责任
(1)小括号()用来表示优先级,传入函数参数序列,以及传入容器的下标或key。
(2)中括号[]用来表示容器的元素的数值类型。
(3)大括号{}用来划分作用域,{}的返回值为最后一个语句的值。
(4)句点符号.表示方法,可以用空格代替。
(5)冒号:用来说明变量的数据类型。
(6)=>用来表示匿名函数的映射关系。
(7)->用来指定映射Map中的键值关系。
(8)<-用来指定for表达式的迭代器。
(9)下划线_在Scala中被用作占位符表示匿名函数参数或作为引入package的通配符。
(10)Scala支持两种类型的变量,即常量val和变量var。
object ScalaTest {
def main(args: Array[String]): Unit = {
/**
* 1、数组,定长数组: 有序,可变类型,长度不可变。
*/
var myArray = Array(40, 32, 55, 33);
for (c <- myArray) {
println(c);
}
var myArray1 = new Array[String](3);
myArray1(0) = "hell";
myArray1(1) = "work";
for (c <- myArray1) {
println(c);
}
/**
*2、List类型是一个不可变的单链表
*/
var alist:List[String] = List("c++","c");
//变量遍历
for(i <- 0 to alist.length-1) {
println(alist.apply(i));
}
//迭代遍历
for( c <- alist) {
println(c);
}
//头部追加元素
var alist2 = alist.::("java").::("python");
for( c <- alist2) {
println(c);
}
//尾部追加元素
var alist3 = alist:+("HTML");
for( c <- alist3) {
println(c);
}
/**
* 3、Map 映射:无序,不可变类型。
* keys
* values
* isEmpty
* get(键)这样的调用返回一个Option对象,要么是Some(键对应的值),要么是None
* Option对象有get函数,直接调用即可获取原来Map中key所对应的value
*/
var colors = Map("red" -> "ddddd", "azure" -> "mmmmm");
for( c <- colors.keys){
println(c);
println(colors.get(c).get);
}
/**
* 4.Tuple 元组:有序,不可变类型,可以存放不同数据类型元素
*
*/
var t = new Tuple3(1, 3.14, "Fred");
println(t._1+","+t._2+","+t._3);//访问各元素
/**
* 5.Iterator(迭代器)
*/
var it = Iterator("Baidu", "Google", "Runoob", "Taobao")
while (it.hasNext){
println(it.next())
}
/**
* 6、高阶函数,map映射
*/
var data1 = List[String]("abc", "cdf", "ghi");
var list1 = data1.map(line => line.toUpperCase());
for(c <- list1) {
println(c);
}
/**
* 7、高阶函数,reduce归约
* 定义一个变换f, f把两个列表的元素合成一个,遍历列表,最终把列表合并成单一元素
*/
var mylist = List(1,2,3,4,5);
var sum = mylist.reduce((a,b) => a + b);
println(sum);
/**
8、scala 函数和方法
Scala 方法是类的一部分,而函数是一个对象可以赋值给一个变量。换句话来说在类中定义的函数即是方法。
Scala 中的方法跟 Java 的类似,方法是组成类的一部分。
def functionName ([参数列表]) : [return type]
Scala 中的函数则是一个完整的对象,Scala 中的函数其实就是继承了 Trait 的类的对象。
Scala 中使用 val 语句可以定义函数,def 语句定义方法。
匿名函数
(x:Int)=>{函数体}
x:表示输入参数类型;Int:表示输入参数类型;函数体:表示具体代码逻辑
*/
//方法
def m(x: Int) = {
x + 3
}
println(m(50));
//函数
val f = (x: Int) => x * 3
println(f(100));
//无返回方法
def printm():Unit= {
println("same void");
}
//闭包是一个函数,返回值依赖于声明在函数外部的一个或多个变量。
var k = 100;
def y = (x:Int) => x * k;
println(y(40));
}
}