Scala
我不是李寻欢
百转千折落人间,身披绶带赛玉泉;
婀娜生姿门前客,飞驰化做林中仙.
展开
-
Scala 基础2⃣️数组
数组:Array/ArrayBuffer----------------------------/定长数组:/--------------------------------------val a:Array[Int]=Array(1,2,3,4,5)//a=Array(1,2,3) //错误println(a(0))a(0)=10println(a(0))原创 2017-08-22 18:05:36 · 212 阅读 · 0 评论 -
scala执行外部命令
首先scala 是运行在java虚拟机中的,也就是JVM 虚拟机进程中的那么scala是否可以执行在scala进程之外的命令?答案是肯定的。实际上Scala 也是支持这样的操作的。scala运行在一个独立的进程,但是可以执行外部的一些命令import sys.process._//这里的命令是linux系统的命令"ls -a .."!"javac HelloWorld.java"!"java原创 2017-08-31 20:42:09 · 2147 阅读 · 0 评论 -
scala支持正则表达式
首先定义一个正则表达式,使用String类的r方法 此时返回的类型是scala.util.mathching.Regex类的对象val pattern="[a-z]+".r我们再定义一个字符串val str= "hello 123 world ,fuck you taibei "获取一个字符串后,匹配正则表达式的部分,使用findAllIn会获取到一个Iterator,迭代器;然后可以去原创 2017-09-01 08:36:37 · 245 阅读 · 0 评论 -
scala提取器详解
scala提取器apply方法:伴生类和伴生对象的概念,companion class和companion object伴生对象里面,可以定义一个apply方法此时在apply方法中,会创建一个半生类的对象,返回回去这样的方式又一个好处:创建对象不需要new,直接传参数返回对象。unapply方法,顾名思义,那就是反过来。apply方法,是接收了一堆参数,返回一个对象unapply方法,原创 2017-09-01 09:38:46 · 366 阅读 · 0 评论 -
scala样例类提取器
scala中的样例类,类似于java中的javabean,包含了一堆属性field,每个filed都有一对getter和setter方法case class Person(name:String,age:Int)//样例类默认有apply方法val p=Person("神策",28)//样例类默认有unapply方法,自动提取属性p match{ case Person(name,ag原创 2017-09-01 09:45:19 · 531 阅读 · 0 评论 -
scala只有一个参数的提取值
普通提取器:接受一个字符串,作为参数,然后从字符串里面解析多个字符值,然后将多个字段值封装在一个Tuple中但是如果类中只有一个字段,这样解析出来的值是无法放入一个tuple中的,因为scala中的tuple必须要有两个及以上的值。这个时候,只能讲unapply方法中的字段值封装在Some对象中,直接返回;class Person(val name:String)object Person{原创 2017-09-01 09:52:29 · 436 阅读 · 0 评论 -
Scala注解详解
什么是注解: 就是scala 编译器,就可以在编译的时候,注解有一些特殊的操作。 scala 中,有哪些地方可以添加注解? scala中,可以给类,方法,fields、local variable、constructor / method / functions parameters添加注解,而且scala是支持给某个目标添加多个注解的 有一个很金典的注解@BeanProperty原创 2017-09-01 11:05:54 · 5308 阅读 · 1 评论 -
scala中XMl基础操作
scala中定义xmlscala对xml有很好的支持,可以直接在scalal代码定义一个xml文档val books=<books><book>my first scala book</book></books>//此时doc的类型是scala.xml.NodeElem,也就是一个XML元素scala中还可以定义多个同级别的xml元素val books=<book>葵花宝典</book><原创 2017-09-01 11:35:34 · 1888 阅读 · 0 评论 -
xml中嵌入Scala代码
在xml中嵌入scala代码val books=Array("book1","book2")val booksxml=<books><book>{books(0)}</book></bookd><books><book>{books(1)}</book></bookd>booksxml.labelbooksxml.child//在xml中动态的获取元素val bookXml=<books>{f原创 2017-09-01 11:47:33 · 241 阅读 · 0 评论 -
scala中xml修改元素详解
默认情况下,scala中的xml表达式是不可改变的,如果要修改xml元素的话,必须拷贝一份再修改val books=<books><book>辟邪剑谱</book></books>添加一个 子元素val booksCopy=books.copy(child=books.child ++ <book>独孤九剑</book>)val book=<book id="1">book1</book>imp原创 2017-09-01 12:39:34 · 897 阅读 · 1 评论 -
scala加载和写入外部xml文件
import scala.xml._import java.io._//使用scala的XML类加载器val books=XML.loadFile("c://books.xml")//使用java的FileInputStream类加载val books=XML.load(new FileInputStream("c://book.xml"),"UTF-8")//将内存中的xml对象,写入外原创 2017-09-01 14:17:25 · 1155 阅读 · 0 评论 -
scala中结合元素的操作
col:+ ele//将元素的添加到集合的尾部(seq)ele +:col//将元素添加到集合的头部(seq)col + (ele,ele)//将其他集合添加到集合尾部(set/map)col -(ele,ele)//将子集合从集合中删除(set/map/ArrayBuffer)col1 ++ col2//将其他集合添加到集合尾部(Iterator)col2 ++: col1 //原创 2017-09-01 14:36:19 · 6522 阅读 · 0 评论 -
scala偏函数的函数形式
偏函数:是一种高级的函数形式 简单来说,偏函数就是没有定义好的明确的输入参数的函数,函数体就是一连串的case语句 偏函数是PartialFunction[A,B]类的一个实例这个类有两个方法:一个是Apply()方法,直接调用可以通过函数体内的case进行匹配,返回结果;另一个是isDefineAt()方法,可以返回一个输入,是否跟任何一个case语句匹配example:学生成绩查询案例原创 2017-08-31 20:29:21 · 325 阅读 · 0 评论 -
Scala文件操作实战详解
scala中遍历文件中的每一行必须导入scala.io.Source类:import scala.io.Source使用Source.getLines返回的迭代器(只能调用一次,再次调用会清空)val source = Source.fromFile("E://a.txt","UTF-8") val lines=source.getLines for(line <- lines )print原创 2017-08-31 20:19:20 · 798 阅读 · 0 评论 -
Scala 基础1⃣️基础语法
概述: 1、面向对象编程和函数式编程的各种特性语言 2、基于JVM运行,和Java集成度很高,被直接编译为Java字节码 3、函数式编程、模式匹配、隐式转换scala语言特性:快速实验: Scala有交互式命令行(REPL),可以在上面快速的试各种语法和代码。这对学习新特性,或者实验新想法非常有用。一致性: 尽管Scala融合了静态类型系统、面向对象原创 2017-08-22 17:49:38 · 254 阅读 · 0 评论 -
scala基础4⃣️集合
map/set/list==============================================集合==========================================@可变集合可以在适当的地方被更新或扩展,意味着你可以修改、添加、移除一个集合的元素。@而不可变集合类,相比之下,永远不会改变。不过,你仍然可以模拟添加,移除或更新操作。 但是这些操原创 2017-08-22 18:27:53 · 232 阅读 · 0 评论 -
scala基础3⃣️函数
//常规函数:def f(x:Int):Int ={ x+1 //return可以省略,最后一个表达式的值即为返回值}// 无返回值,使用Unitdef f():Unit ={ println("Hello")}//Unit和其他类型都可以省略,Scala可以执行判断函数的返回类型def f()={ println("Hel原创 2017-08-22 18:16:57 · 268 阅读 · 0 评论 -
scala基础5⃣️样例类
// 样例类里定义field,并由Scala在编译时自动提供getter和setter方法,但是样例类里没有method// 样例类的属性默认为val(可以设为var】)// 样例类自带伴生对象,并且有apply()方法,该方法用来生成样例类对象def main(args:Array[String]): Unit ={ class Person case cla原创 2017-08-23 17:30:42 · 224 阅读 · 0 评论 -
scala基础5⃣️高阶函数
========================scala函数========================================Scala函数可以直接赋值给变量,语法规定,将函数赋值给变量时,必须在函数名后面加上空格和下划线def sayHello(name: String) = { println("Hello, " + name) }val sayHelloF原创 2017-08-23 17:34:46 · 198 阅读 · 0 评论 -
Scaladoc
Scaladoc是什么:scala api文档,包含了scala所有的api以及使用说明,class、object、trait、function、method、implicit等为什么要查阅Scaladoc:如果只是写一些普通的Scala程序,课程中讲解(Scala编程详解)的内容基本够用了;但是如果(在现在,或者未来,实际的工作环境中)要编写复杂的scala程序,那么还是需要参考Scal翻译 2017-08-31 14:31:02 · 1113 阅读 · 0 评论 -
Scala跳出循环的三种方法
Scala跳出循环的三种方法1、基于boolean类型的控制变量while循环:var flag = truevar res = 0var n = 0while(flag) { res += n n += 1 if (n == 5) { flag = false }}for循环:(高级for循环,加上了if守卫)原创 2017-08-31 14:43:42 · 22407 阅读 · 1 评论 -
Scala多维数组、Java数组与Scala数组的隐式转换
多维数组:数组的元素,还是数组,数组套数组,就是多维数组构造指定行与列的二维数组:Array.ofDim方法val multiDimArr1 = Array.ofDim[Double](3, 4)multiDimArr1(0)(0) = 1.0构造不规则多维数组:val multiDimArr2 = new Array[Array[Int]](3)multiDimA原创 2017-08-31 15:06:38 · 3728 阅读 · 0 评论 -
Scala的Tuple拉链操作、Java Map与Scala Map的隐式转换
Tuple拉链操作指的就是zip操作zip操作,是Array类的方法,用于将两个Array,合并为一个Array比如Array(v1)和Array(v2),使用zip操作合并后的格式为Array((v1,v2))合并后的Array的元素类型为Tupleval students = Array("Leo", "Jack", "Jen")val scores = Array(8原创 2017-08-31 15:23:43 · 6618 阅读 · 0 评论 -
Scala扩大内部类作用域的2种方法、内部类获取外部类引用
一:内部类的作用对象:外部类对象import scala.collection.mutable.ArrayBufferclass Class { class Student(val name: String) val students = new ArrayBuffer[Student] def register(name: String) = {原创 2017-08-31 15:42:12 · 352 阅读 · 0 评论 -
Scala重写field的提前定义、Scala继承层级、对象相等性
重写field的提前定义默认情况下,如果父类中的构造函数代码,用到了会被子类重写的filed; 那么子类的filed将会出错子类的构造函数调用父类的构造函数父类的构造函数初始化field(结果正确)子类的构造函数使用field执行其他构造函数,但是此刻该field的getter方法被重写,返回0子类的构造函数再执行,重写field但是此时子类从父类继承的代码,已经出现了错误了class原创 2017-08-31 19:15:53 · 957 阅读 · 0 评论 -
scala集合中的操作详解
map操作,一对一的映射val scoreMap=Map("leo"->29,"jack"->34,"christ"->83)val names=List("leo","jack","christ")names.map(scoreMap(_))flatMap ,一对多映射val scoreMap=map("leo"->List(80,90,100),"jack"->List(23,56,40)原创 2017-09-01 15:03:43 · 231 阅读 · 0 评论