博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
scala学习(一)
阅读量:6097 次
发布时间:2019-06-20

本文共 4789 字,大约阅读时间需要 15 分钟。

hot3.png

scala是纯粹的面向对象语言,每个操作都是方法调用。

scala也是函数式编程语言,它有两种理念:1、函数式头等值,在函数式语言中,函数也是值,与整数或字符串处于同一个地位。函数可以被当作参数传递给其他函数。2、程序的操作应该把输入值映射为输出值而不是就地修改数据。

scala有不可变的列表、元组、映射表和集。

scala调用java中string对象中toInt方法是发现没有,它会将java的String对象隐式转换成Scala中的RichString对象,RichString有toInt方法。

一、变量定义

scala有两种变量:var和val,val类似于java里面的final变量。一但初始化了,val就不能再被赋值了。

*在java里,返回的值得类型称为返回类型,在scala里面称为结果类型。

*scala中的<-符号代表“其中”。如果要读for(arg<-args),就读做“对于args中的arg”。

*不写new List,因为“List.apply()”是定义在scala.List伴生对象中的工厂方法。

Nil是空列表的简写同List()

二、列表List的常用方法 

val t = "Will" :: "fill" :: "until" :: "Util" :: Nil

println(t(2))              //返回t列表上索引为2(基于0)的元素,值为until

println(t.count(s => s.length == 4))   //计算长度为4的string元素个数为3

println(t.take(2))   //返回前2个元素的t列表,值为List("Will","fill")

println(t.takeRight(2))  //返回后2个元素的t列表,值List("until","Util")

println(t.drop(2))       // 返回去掉前两个的t列表,值为List("until","Util")

println(t.dropRight(2))      //去掉后两个元素的t列表,值为List("Will","fill" )

println(t.exists(s => s == "until"))    //判断是否值为"until"的字符串元素在t列表你,值为:true

println(t.filter(s => s.length == 4))   //返回长度为4的元素依次组成的新列表,值List("Will","fill","Util")

println(t.forall(s => s.endsWith("l")))  //判断是否t列表里面所有元素都一"l"结尾,值为:true

t.foreach(s => print(s))    //对t列表每一个元素执行print语句,值为:"WillfilluntilUtil"

t.foreach(print)     //于上相同,不过更简洁(同上)

println(t.head)      //取第一个元素

println(t.last)        //取最后一个元素

println(t.tail)        //取除去列表第一个元素的其他所有元素组成的列表

println(t.init)        //取除去列表最后一个元素的其他所有元素组成的列表

println(t.isEmpty)     //判断列表是否为空,为空true,不为空false

println(t.length)        //返回列表元素数量

println(t.map(s => s + "y"))     //对列表中每个元素都做一次表达式计算,并返回一个新的列表

println(t.mkString(","))            //将列表元素以,号隔开组成一个字符串

println(t.reverse)                     //倒转这个列表的元素

//println(t.remove(s => s.length == 4))

println(t.filterNot ( s => s.length() == 4 ))      //过滤出元素长度不是4的,元素并返回,值为:List("until")

//println(t.sort((s,t) => s.charAt(0).toLowerCase < t.charAt(0).toLowerCase))

println(t.sortWith((s,t) => s.charAt(0)< t.charAt(0)))   //将元素按默认排序。

println(t.partition(s=>s.length == 4))  //将元素分成满足条件长度等于4的一个list与一个不满足条件的一个list

println(t.find(s=>s.length == 4 )) //将返回第一个满足条件的元素.并包装成option类型

println(t.span(s.startsWith("W")))  //span是遍历每一个元素是否满足传入函数的条件,直到不满足的返回2个集合.(List("Will"),List("fill","until","Util")),这个函数太恶心了不知道有什么用可以自行测试

println(t.takeWhile(s.startsWith("W")))  //从第一开始直到返回false的那个元素.返回从第一个开始所有判断为true的元素

println(t.takeWhile(s.dropWith("W")))   //从第一开始直到返回false的那个元素.返回从第一个返回false的元素之后的所有元素

val  i = "SB" :: t   //加入一个元素返回一个新的列表

takeWhile (...)           等价于:while (...) { take }

dropWhile (...)           等价于:while (...) { drop }

span (...)          等价于:while (...) { take; drop }

三、集Set常用方法

var jetSet = Set("SB","MB")

jetSet += "NB"  //加入一个元素返回一个新的集

println(jetSet.contains("NB"))  //true

四、元组(Tuple)

var pair = (99,"test")

println(pair._1)//访问索引为一的元素。元组的索引从1开始

println(pair _2)

五、Map

var treasureMap = Map[Int,String]()

treasureMap += (1->"test") //添加一个key为1,value为"test"的值

treasureMap(1) //获取key为1的,value的值:"test"

treasureMap.getOrElse("key",0)  //如果存在着返回这个key的value,如果不存在这个key返回一个给定默认值0

可变map:val map = new collection.mutable.HashMap[String,Int] 

                 新增一个键值对:map("key") = 1 或 map += ( "key" -> 1)

不可变map:var map = new collection.mutable.HashMap[String,Int] //必须的var的

                 新增一个键值对: map += ( "key" -> 1)

已排序map:var map = collection.SortedMap[String,Int]()    //不可以new它是一个抽象的

                  新增一个键值对: map += ( "key" -> 1)

Option类型的值通常作为Scala集合类型(List,Map等)操作的返回类型。 比如Map的get方法

六、Array、List、Set、Map、Tuple的异同

Array、List索引都是基于0的,Tuple索引是基于1的。

Array、List、Set、Map他们只能放入指定类型,Tuple可以放入任意类型。

 

随机生成字符串:BigInt.probablePrime(100,util.Random).toString(36)

import StringOps

charAt(0)下标为0的字符变成char类型(基于0)

take(n)               从左到右取n个

takeRight(n)      从右到左取n个

drop(n)              除去前n个返回剩余的String

dropRight(n)     除去后n个返回剩余的String

 

七、ArrayBuffer或Array

import scala.collection.mutable.ArrayBuffer

val a = ArrayBuffer[Int]()

a.updte(0,0) 或者 a(0) = 0   //修改下标为0的元素

a += 1                      //向数组中添加元素

a ++= Array(1,2,3)   //++=操作符可以添加任何集合

a.trimEnd(2)             // 移除最后2个元素

a.insert(2,4)              //在下标为2的位置插入4

a.insert(2,5,6,7)        //在下标为2的位置插入多个元素5,6,7

a.remove(2)             //移除下标为2的上的元素

a.remove(1,2)             //移除索引从1开始,删除2个元素

a.count( _ > 0 )       //清点有多少的正元素 

a.sum  //计算元素的和

a.max  //取出最大值

a.min   //取出最小值

a.toArray                  //转换成Array

ArrayBuffer(1,2,3).copyToArray(Array(4,5))   //左边会覆盖又遍的对应下标的元素。并且左边要是右边Array的超类

 1>Array

val a = Array[Int](10)         //这样创建时创建一个长度为1的定长数组,这个数组里面发的是10

val a = new Array[Int](10)      //new是创建一个长度为10的定长数组,默认值全部是0

val  arrayToMap = Array(("1",1),("2",2)).toMap

a.toBuffer          //转换成ArrayBuffer

scala.util.Sorting.quickSort(a)            //a要是Array,它会修改a本身。

a.sortWith(_ < _)   //对a进行从小到大排序,返回一个新的Array,不会修改原有的Array

a mkString(",")    //一","号分割每个元素返回这个逗号连接的字符串

a mkString("<",",",">")    //重载的方法,给前后加上指定开始符号和结束符号

八、多维数组

val arrays = Array.ofDim[Double](x,y)  //x行,y列

创建一规则多维数组

val arrays = new Array[Array[Int]](10)

for(i <- 0 until arrays.length){

    arrays(i) = new Array[Int](i+1)

}

**拉链操作

StringOps中的zip定义如下 

abstract def zip[B](that: GenIterable[B]): StringOps[(A, B)] 

GenIterable是可遍历对象需要包含的trait,对于String来说,它是可遍历的。但是它的遍历是遍历单个字母。 所

以拉链就针对每个字母来进行。

 

转载于:https://my.oschina.net/u/2300159/blog/490850

你可能感兴趣的文章
Android Jni调用浅述
查看>>
CodeCombat森林关卡Python代码
查看>>
第一个应用程序HelloWorld
查看>>
(二)Spring Boot 起步入门(翻译自Spring Boot官方教程文档)1.5.9.RELEASE
查看>>
Android Annotation扫盲笔记
查看>>
React 整洁代码最佳实践
查看>>
聊聊架构设计做些什么来谈如何成为架构师
查看>>
Java并发编程73道面试题及答案
查看>>
iOS知识小集·设置userAgent的那件小事
查看>>
移动端架构的几点思考
查看>>
Tomcat与Spring中的事件机制详解
查看>>
Spark综合使用及用户行为案例区域内热门商品统计分析实战-Spark商业应用实战...
查看>>
初学者自学前端须知
查看>>
Retrofit 源码剖析-深入
查看>>
nodejs express
查看>>
企业级负载平衡简介(转)
查看>>
ICCV2017 论文浏览记录
查看>>
科技巨头的交通争夺战
查看>>
当中兴安卓手机遇上农行音频通用K宝 -- 卡在“正在通讯”,一直加载中
查看>>
Shell基础之-正则表达式
查看>>