![](https://img-blog.csdnimg.cn/20200622200706318.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
scala
ss
稳哥的哥
babe babe babe wowowowowowoow~!
寒江孤影、江湖故人
展开
-
scala之-用递归代替while do while循环
scala之-常用递归代替while do while循环1 递归求和 //1 计算1-50的和 def getAdd(l:Long): Long ={ if (l<=0) throw new Exception("msg") if (l == 1) return l getAdd(l-1)+l } getAdd(50).sout //12502 递归求最大值/** * 递归求最大值 */object DiguiMax原创 2020-08-18 21:53:22 · 316 阅读 · 0 评论 -
scala之-控制抽象
scala之-控制抽象1 什么是抽象控制什么是抽象控制?抽象控制是一个方法,但是方法的参数a是一个函数2)函数a的没有参数,也没有返回值主要目的:在一个方法中调用某个代码块,也可一理解成() => Unit的匿名函数,可以简写成 =>Unitpackage com.shufang.scala02/** * 什么是抽象控制? * 1) 抽象控制是一个方法,但是方法的参数a是一个函数 * 2)函数a的没有参数,也没有返回值 * 主要目的:在一个方法中调用某原创 2020-08-18 21:52:01 · 468 阅读 · 0 评论 -
scala-之函数curry柯里化
scala-之函数curry柯里化函数柯里化就是为了证明所有接收多个参数的函数都能转化成 多个接收1个参数的函数,所有的函数都只需要一个参数package com.shufang.scala01/** * 测试柯里化 * * 编写一个函数,接收两个整数,可以返回两个数的乘积,要求: * 使用常规的方式完成 * 使用闭包的方式完成 * 使用函数柯里化完成 */object CurryFuncDemo { def main(args: Array[String]): Unit =原创 2020-08-17 22:27:31 · 270 阅读 · 0 评论 -
scala-之闭包clousure
scala-之闭包clousure1 什么是闭包首先举个简单的例子,看下面代码/**1) 第1点(y: Int) => x + y返回的是一个匿名函数 ,因为该函数引用到到函数外的 x,那么该函数和x整体形成一个闭包如:这里 val f = minusxy(20) 的f函数就是闭包 ;2)你可以这样理解,返回函数是一个对象,而x就是该对象的一个字段,他们共同形成一个闭包3)当多次调用f时(可以理解多次调用闭包),发现使用的是同一个x, 所以x不变。4)在使用闭包时,主要搞清楚返回函数原创 2020-08-17 22:26:56 · 304 阅读 · 0 评论 -
scala-之高阶函数
scala-之高阶函数high level funcs1 高阶函数简介在scala中能够接收函数作为参数的函数称为 高阶函数,类似于map(),在scala中函数也是有类型的,高阶函数也可以返回一个函数2 简单代码实现package com.shufang.scala01/** * 主要是用来创建高阶函数 */object HighLevelFunction { def main(args: Array[String]): Unit = { //创建一个高阶函数 de原创 2020-08-17 22:26:18 · 803 阅读 · 0 评论 -
scala之偏函数 partial function
scala之偏函数 partial function0 偏函数简介偏函数只能通过collect方法来调用,而不能使用map()使用构建特质的实现类(使用的方式是PartialFunction的匿名子类)PartialFunction 是个特质(看源码)构建偏函数时,参数形式 [Any, Int]是泛型,第一个表示参数类型,第二个表示返回参数当使用偏函数时,会遍历集合的所有元素,编译器执行流程时先执行isDefinedAt()如果为true ,就会执行 apply, 构建一个新的原创 2020-08-16 23:09:26 · 188 阅读 · 0 评论 -
Scala-之样例类(模版类) case class 和 密封类 sealed class
Scala-之样例类(模版类) case class 和 密封类 sealed class1 样例类样例类不仅能够像普通类那样创建方法,还可以自定生成get set tostring equals apply unapply等方法,可直接使用//声明一个样例类case class B{ var name:String def say(s:String):Unit}2 密封类//声明一个密封类sealed class BB{ }3 case class and seale原创 2020-08-16 23:08:39 · 397 阅读 · 0 评论 -
scala之-模式匹配(match case)Array-List-Tuple
scala之-模式匹配(match case)Array-List-Tuplematch case类似于java中的swich case default break,但是除了值匹配功能更强大,可以用来逻辑判断以及转换下面通过Array、Tuple、List的匹配来一探究竟,what is match case1 Arraypackage com.shufang.funsobject ArrayMatchCase { def main(args: Array[String]): Unit原创 2020-08-15 00:41:09 · 443 阅读 · 0 评论 -
scala代码之-并行执行par 和 延迟加载view
scala代码之-并行执行par 和 延迟加载view在scala中Stream类型的tail方法是延迟lazy加载的,每调用一次tail方法,都会按照给定的规则创建一个新的流Stream1 view延迟加载执行package com.shufang.funsimport scala.collection.SeqViewobject ViewToLazyDemo { def main(args: Array[String]): Unit = { val list = List(1原创 2020-08-15 00:40:29 · 455 阅读 · 0 评论 -
scala之-Stream流集合数据结构
scala之-Stream流集合数据结构package com.shufang.funs/** * 1)Stream集合存放的数据类型是BigInt,理论可以自动扩容得存放无限个元素,但是是lazy的 * 2)numsForm 是自定义的一个函数,函数名是程序员指定的。 * 3)创建的集合的第一个元素是 n , 后续元素生成的规则是 n + 1 * 4)后续元素生成的规则是可以程序员指定的 ,比如 numsForm( n * 4)... */object StreamDemo { de原创 2020-08-13 23:59:08 · 328 阅读 · 0 评论 -
scala之-集合类常用的高阶函数汇总map reduce flatMap fold scan union zip
scala之-集合类常用的高阶函数汇总集合常用的高阶函数有以下几种:mapflatmapfilterreducefoldscanunionzipmap val list = List(1, 2, 3) //map => List(2, 4, 6) val map: List[Int] = list.map(_ * 2) println(map)flatMap //flatMap val flatmap: List[Int] = l原创 2020-08-13 23:58:33 · 265 阅读 · 0 评论 -
Scala集合之-Queue与Map类型,CURD
Scala集合之-Queue与Map类型1 Queue队列类型queue在数据结构中是一种线性结构,有头有尾且有序,而且是FIFO的一种结构。1.1 immutable.Queue的声明与使用//声明一个Queue结构Queue() //默认就是Queue[Int]()val queue = Queue(1,2,3) //那么这个queue声明之后就不可变了 //一切对该Queue的操作都是生成新的Queue,与immutable.List类似,但是少了::\:::queue.+:(1原创 2020-08-09 10:58:34 · 146 阅读 · 0 评论 -
Scala之-数据结构-(集合类型)Array and List
Scala之-数据结构-(集合类型)Array and Listscala中的集合类型有2个包不可变集合:scala.collection.immutable不可变集合就是本身不能动态变化,类似于Java的数组,不能动态地扩容,只能copy生成另一个集合可变集合: scala.collection.mutable集合本身可以动态变化,比如Java中的ArrayList几乎所有的集合类型都有2种形态,scala默认采用不可变的类型。1 scala集合分类1.1 immutable Co原创 2020-08-04 23:17:12 · 235 阅读 · 0 评论 -
scala之-隐式转换 and implicit关键字修饰类、方法、变量
scala之-隐式转换 and implicit关键字implicit 在scala中属于关键字,可以修饰变量、方法函数、类implicit 变量 \ 隐士值、默认给该类型的变量加上缺省值,方法调用时,不需要传入该参数,默认就给你用缺省值进行填充了Implicit 方法\ 主要是用来进行类型转换,也可以对类的功能进行扩展Implicit 类1 隐式转换函数scala是一门强类型的面向对象的语言,Any分为值类型(AnyVal)、引用类型(AnyRef)。AnyVal:Byte\Short\原创 2020-08-01 16:32:01 · 327 阅读 · 0 评论 -
scala之类的嵌套、内部类
scala之类的嵌套、内部类、外部类scala中也支持嵌套类,Java中也是支持内部类的 .1 通过外部类创建内部类的对象实例小试牛刀代码如下。package com.shufang.inner_classimport com.shufangclass InnerClassDemo { //普通成员内部类 class InnerClass {}}object InnerClassDemo { //静态内部类 class InnerStaticClass {}原创 2020-08-01 00:58:48 · 329 阅读 · 0 评论 -
scala之-初始化对象时动态混入叠加特质 new C() with T1 withT2 ..
scala之-初始化对象时动态混入叠加特质extends with with with … * 在动态混入叠加特质的时候,如果特质中调用super.insert(i), * 那么这个super首先会调用左边特质的insert(i),而不一定是父类的。 * 只有当当前特质的左边没有特质的时候,或者左边特质没有该方法时才会调用该特质的父类的insert(i) * * 叠加特质的声明:从左往右 new C1() with T1 with T2 .... * 叠加特质执行super.xx:从右往原创 2020-07-30 23:50:20 · 374 阅读 · 0 评论 -
Scala trait 和 Java 的interface 动态混入
Scala trait 和 Java 的interface1 Java的interface(接口)Java接口中的属性都是常量,通过接口名.属性进行调用.Java接口中的方法必须全部都是抽象的Java接口可以同时继承多个父接口interface A extends B,C,D... 其中BCD都接口,但是接口不能继承类//JAVA中的一个接口可以继承多个父接口public interface TestInterface extends Serializable, Deserial原创 2020-07-30 14:31:35 · 424 阅读 · 0 评论 -
scala之伴生对象 and 伴生类(apply 方法定义)((class and object)静态成员)
scala之-伴生对象 and 伴生类(静态成员)在Scala中有也有类似于Java中的静态属性、方法、类的概念,那就是伴生类、伴生对象那么,什么是伴生类和伴生对象呢?babe,please watch blow。//伴生类\常规属性、会生成class Person{}//伴生对象object Person{}1 apply方法的使用以及静态成员的调用package com.shufang.banshengduixaing/** * 如果,设计一个var total Int表示总人原创 2020-07-30 11:26:49 · 250 阅读 · 0 评论 -
scala之抽象类-abstract、【final、private】等关键字
scala之抽象类-abstract关键字、final、private关键字1 Java之抽象类abstarct class A{}在java中,抽象类中必须有抽象的方法,抽象类可以被继承,但是继承的同时必须重写所有的抽象方法。abstract class A{ //必须要有抽象方法 public abstract String say(String name){ return name; }}2 scala抽象类abstarct class B{}在scala中,抽原创 2020-07-30 10:56:47 · 531 阅读 · 0 评论 -
scala之类加载 and 初始化顺序(构造器)
scala之-类加载 and 初始化顺序(与java对比)babe!~1 scala的对象加载顺序1、首先通过类加载器加载类信息。2、初始化成员(属性、方法及其变量)3、通过主构造器进行初始化4、通过辅助构造器进行初始化5、给接收的变量分配内存地址2 声明子类对象时构造器的加载顺序2.1 Java在Java中,声明子类对象时,子类的所有的构造器(包括有餐、午餐构造器)、会隐式或者显式的调用父类的无参构造器super()package com.shufang.facetoobject原创 2020-07-30 10:56:28 · 1824 阅读 · 0 评论 -
scala之-访问权限修饰符 与 java的区别
scala之-访问权限修饰符 与 java的区别public、private、default、protectedpackage com.shufang.three/** ------------------JAVA-------------------- * 在JAVA中,有四种修饰符:public 、protected 、private 、default * public , 可以在本类、本包、子类、其他包中被访问 * protected , 可以在本类、本包、子类中被访问 * pri原创 2020-07-29 23:01:06 · 198 阅读 · 0 评论 -
scala之-包对象
scala之-包对象1 怎么创建一个package object?//说明//1. 在包中直接写方法,或者定义变量,是不行的==>使用包对象的技术来解决//2. package object one 表示创建一个包对象 one, 他是 com.shufang.one 这个包对应的包对象//3. 每一个包都可以有一个包对象//4. 包对象的名字需要和该包下的子包一样//5. 在包对象中可以定义变量,方法//6. 在包对象中定义的变量和方法,就可以在对应的包中的任何类中访问、使用//7原创 2020-07-29 22:31:01 · 623 阅读 · 0 评论 -
java的switch case与scala的match case语法的比较
/** switch case 分支 一般用于变量与value值的比较,决定走那几个分支的代码 */switch(name){ case "张三": //[break;]可选 case "莉丝": break; ... default: System.out.println("nothing")}/**match case 是scala中的模拟匹配可以用于单值比较、多值比较、正则匹配、类型比较、条件匹配等高级功能,还可以使用守卫可以使用变量以及函数进行接收de原创 2020-07-01 23:55:41 · 906 阅读 · 0 评论 -
利用scala的foldLeft统计一个字符串中每个字符出现的次数
object CharCount { def main(args: Array[String]): Unit = { val s = "aaaaaaabbbbbccccccccccc" //首先用一个map来维护(k,v)类型 val charToInt: Map[Char, Int] = s.foldLeft(Map[Char, Int]()) { ...原创 2020-02-13 11:25:55 · 1373 阅读 · 0 评论 -
scala中的breakable{}实现continu 与break
scala中的breakable{}package com.shufang.scalaimport scala.util.control.Breaks._/** * @ ObjectName TestBreak * @ Author shufang * @ Descripetion * @ Date 2019/10/24 13:36 * @ Version 1.0 ...原创 2019-10-24 13:50:05 · 293 阅读 · 4 评论