Scala学习笔记——类型
1.Option类型
Option类型可以有两种类型,一种是Some(x),一种是None对象
比如Scala的Map的get方法发现了指定键,返回Some(x),没有发现,返回None对象
2.列表
List类型中的所有元素都具有相同的类型。
空列表的类型为List[Nothing]。对于任意类型T的List[T],List[Nothing]都是其子类。
val list = List[String]("1","2","3")
val list1 = "1"::"2"::"3"::Nil //所有的列表都是由两个基础构造块Nil和::构造出来的,Nil表示空列表
列表的基本操作
head 返回列表的第一个元素,仅能作用在非空列表上
tail 返回除第一个之外所有元素组成的列表,仅能作用在非空列表上
isEmpty 判断是否为空
列表模式
列表可以使用模式匹配做拆分
val List(a,b,c) = list1 //两个List的长度相等,里面的元素一一对应
val a1 :: b1 :: rest = list1 //如果不知道长度,还是用::来做匹配,rest会是一个List
List类的一阶方法
1.连接列表使用 :::
2.列表长度,length
3.head和tail,获得第一个和除了第一个之外的列表
last和init,获得最后一个和除了最后一个之外的列表
4.翻转列表,reverse
5.drop和take可以返回任意长度的前缀或后缀
6.splitAt可以在指定位置拆分列表
val list = List[String]("1","2","3")
println(list.splitAt(1))
7.apply实现了随机元素的选择,按下标选择元素
indices方法可以返回指定列表的所有有效索引值组成的列表
8.啮合列表:zip,zip操作可以把两个列表组成一个对偶列表
如果想把列表元素和索引值啮合在一起,可以使用zipWithIndex
9.显示列表:toString和mkString
val list = List[String]("1","2","3")
println(list.toString())
//输出 List(1, 2, 3)
val list = List[String]("1","2","3")
println(list.mkString("0",",","4")) //前缀字符串,分隔符,后缀字符串
//输出 01,2,34
val buf = new StringBuilder
println("abcde".addString(buf,"{",";","}"))
#输出 {a;b;c;d;e}
10.转换列表:toArray、copyToArray
val arr = "abcde".toArray //转换成Array
arr.foreach(print) val l = "abcde".toList //转换成List
l.foreach(print)
val arr1 = Array[String]("1")
val arr2 = Array[String]("0","0","2")
arr1.copyToArray(arr2,1) //把第一个arr的元素复制到第二个arr的相应位置
arr2.foreach(print) //输出012
List类的高阶方法
1.列表间映射:map、flatMap和foreach
map把函数f应用在列表的每个元素之后生成的结果,组成一个新的列表,然后返回
val words = List("Hello","World")
println(words.map(_.toList))
println(words.flatMap(_.toList))
//List(List(H, e, l, l, o), List(W, o, r, l, d))
//List(H, e, l, l, o, W, o, r, l, d)
2.列表过滤:filter、partition、find、takeWhile、dropWhile和span
filter过滤出符合条件的元素组成的列表
val words = List("Hello","World")
val filt = words.filter(_ == "Hello")
println(filt) //输出 List(Hello)
partition返回列表对
val words = List("Hello","World")
val filt = words.partition(_ == "Hello")
println(filt) //输出列表对 (List(Hello),List(World))
find返回第一个满足条件的元素
val words = List("Hello","World")
val filt = words.find(_ == "Hello")
println(filt) //输出 Some(Hello)
takeWhile和dropWhile返回满足条件的最长前缀和最长后缀
span返回takeWhile和dropWhile的组合
列表的论断:
forall,如果列表中的所有元素都满足条件,返回true
exists,如果列表中有一个元素满足条件,返回true
val filt = words.forall(_ == "Hello")
println(filt) //返回false
折叠列表 /:和:\
val result = ("" /: list) (_ + " " + _) //初始值,加上每个值和间隔的结果
println(result) //返回 [ 1 2 3]
val result = (list :\ "") (_ + " " + _) //初始值,加上每个值和间隔的结果
println(result) //返回 [1 2 3 ]
列表排序
val result = list.sortWith(_ > _)
println(result)
List对象的方法
List.apply,通过元素创建列表
val list = List.apply("4","5","6")
List.range,创建数值范围,生成 List[1,2,3,4,5]
val list = List.range(1,6)
解除啮合列表,List.unzip
连接列表 List.concat
val list = List[Char]('a','b','c')
val list1 = List[Char]('z','x','c')
val list2 = List.concat(list,list1)
println(list2) //输出 List(a, b, c, z, x, c)
3.集合类型
集合类型包括:数组(Array)、列表(List)、集(Set)、映射(Map)

val list = List(1,2)
val ite = list.iterator
while (ite.hasNext) {
println(ite.next())
}
数组和列表是不可变对象,操作的时候使用buf来构造
队列(Queue)
添加元素——enqueue()
从头部移除元素——dequeue()
返回添加了元素之后的队列——append()
import scala.collection.mutable.Queue
val empty = new Queue[Int]
empty.enqueue(0)
empty.enqueue(1)
empty.enqueue(2)
empty.dequeue()
println(empty)
栈和队列差不多
集(Set)

映射(Map)


元组,可以保存不同类型的对象
val tuple = (1,"2")
println(tuple._1)
println(tuple._2)
Scala学习笔记——类型的更多相关文章
- 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性
基于.net的分布式系统限流组件 在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...
- Scala学习笔记及与Java不同之处总结-从Java开发者角度
Scala与Java具有很多相似之处,但又有很多不同.这里主要从一个Java开发者的角度,总结在使用Scala的过程中所面临的一些思维转变. 这里仅仅是总结了部分两种语言在开发过程中的不同,以后会陆续 ...
- Scala学习笔记(1)-基本类型归纳
1.小试牛刀 使用Scala自带的REPL shell(Read Evaluate Print Loop)学习和尝试Scala语言库,创建的变量在会话期间都是有效的. Ctrl+D可退出REPL sh ...
- Scala学习笔记之:tuple、array、Map
[TOC] 本文<快学Scala>的笔记 tuple学习笔记 tuple的定义 对偶是元组(tuple)的最简单形态--元组是不同类型的值的聚集. 元组的值是通过将单个值包含在圆括号中构成 ...
- 【大数据】Scala学习笔记
第 1 章 scala的概述1 1.1 学习sdala的原因 1 1.2 Scala语言诞生小故事 1 1.3 Scala 和 Java 以及 jvm 的关系分析图 2 1.4 Scala语言的特点 ...
- 机器学习(三)--- scala学习笔记
Scala是一门多范式的编程语言,一种类似Java的编程语言,设计初衷是实现可伸缩的语言.并集成面向对象编程和函数式编程的各种特性. Spark是UC Berkeley AMP lab所开源的类Had ...
- Scala学习笔记 & 一些不错的学习材料 & 函数编程的历史八卦
参考这篇文章: http://www.ibm.com/developerworks/cn/java/j-lo-funinscala1/ 这也是一个系列 严格意义上的编程范式分为:命令式编程(Imper ...
- Scala学习笔记--上界(<:)、视图界定(<%)、上下文界定(T:M)
上界 下界 视界 object Test{ def main(args:Array[String]):Unit={ def mulBy(factor:Double)=(x:Double)=>fa ...
- Scala学习笔记2 (带着问题学习, 逐渐扩展。理解吃透scala.)
问题: 把 文本字符串"[1, 2, 3, 4, 5]" 转换成一个数组. 答案: val x = "[1, 2, 3, 4, 5]" val y =x sli ...
随机推荐
- Python 八大排序算法速度比较
这篇文章并不是介绍排序算法原理的,纯粹是想比较一下各种排序算法在真实场景下的运行速度. 算法由 Python 实现,用到了一些语法糖,可能会和其他语言有些区别,仅当参考就好. 测试的数据是自动生成的, ...
- idea jsp html 空白页的问题
摘要 最近没事儿瞎折腾java web,在idea中,突然发现无法显示页面了. 问题 为什么会出现这个问题? 接触了过滤器的内容,然后在项目中添加了这样的一个过滤器,用来对post过来的数据进行ut8 ...
- AngularJS中转换响应内容
从远程API获取到的响应内容,通常是json格式的,有时候需要对获取到的内容进行转换,比如去除某些不需要的字段,给字段取别名,等等. 本篇就来体验在AngualrJS中如何实现. 在主页面,还是从co ...
- 5款替代微软Visio的开源免费软件
提到流程图和图表设计,自然会想到微软出品的Office Visio,它是一款强大的流程图设计工具.Visio并不在Office标准套装中,需要额外付费购买,这可能会带来某些不便.一方面,并不是所有人都 ...
- 技术分享:几种常见的JavaScript混淆和反混淆工具分析实战【转】
信息安全常被描述成一场军备竞赛,白帽与黑帽,渗透测试者与黑客,善与恶,本文将聚焦这场永无止境决斗中的一个小点. HTML5 & JS 应用中充满着对输入进行验证/注入的问题,需要开发人员始终保 ...
- 还在为工作发愁?学JavaScript吧
事实上,每家专业招聘机构,从Glassdoor.com和Linkedin到美国劳工部,都报导了就业市场对开发人员需求的增长速度出于意料地快.这种需求可能已经不新鲜了,但是就业市场对哪种开发语言的需求量 ...
- DHCP服务原理与搭建(Linux系统+路由器,二选一方案)
大家都知道上网的最基本前提是要在终端上设置IP.子网掩码.网关.DNS等地址信息,在家里或者在办公室很多时候打开电脑后发现就可以上网,并没有手动设置IP.掩码.DNS地址也能上网,这是什么原因呢?其实 ...
- PL/SQL学习笔记之基本块格式与语法
一:PL/SQL程序块 PL/SQL是一种块结构的语言,一个PL/SQL程序就是一个 代码逻辑块. PL/SQL程序由三部分构成: 1 声明 部分 使用关键字DECLARE开头,它是一个可选的部分,用 ...
- 拯救者y720 双显卡, nvidia 1060 ,Ubuntu16.04 安装 Nvidia 显卡驱动
为了能够记录,下次可以有参考的东西,就记录如此 多谢网上大牛的帖子,我都是安装您们的才顺利的一次性,无黑屏现象的完成了安装 1. 参考: 1.secure boot option ( 开机进入bios ...
- 什么是同源策略,什么是跨域,如何跨域,Jsonp/CORS跨域
同源策略 同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响. 可以说Web是构建在同源策略基础之上 ...