Scala整体介绍

Scala

面向对象、函数式编程、更高层的并发模型—里面包含编译器、类库

它不存在成员变量,通过object(单例)取代

函数处理:可以吧函数化成一个参数传过去

Object:入口类关键字-项目入口 类似于Java中的main方法

Def:函数声明—定义一个方法/函数

Val:常量声明

Any:公共超类型 scala中父类

Unit:返回值为空—Java中的void()

伴生对象:object修饰的对象,其中存放的是静态方法、属性  --对象声明

伴生类:class修饰的类,存放的非静态方法、属性     类声明

 

Scala中无任何操作符,所有操作符运算都是对方法的调用?????

For(i<-1 to/until 10) 表示1—10(to表示包含10/until表示不包含10)

特质:Function2 有两个参数的函数  (两个参数一个返回值)

函数式对象,方法(成员)不是对象

方法通过methodname转化成函数,当吧方法作为参数传递的时候,scala会自动把方法转成函数

递归方法需要指定返回值类型

Head:头    tail:出去头以外的其他元素序列

Init:除最后一个,所有元素

函数体在{}中,但没有前面的=号,那么返回值类型是unit,这样的函数叫过程

调用它是为了使用它的副作用,比如:打印图案

.mkstring  打印集合中内容,以字符串显示

.filter()   过滤掉参数中为false的元素

 

Scala集合

特质:就是Java中的接口

在scala中[ ] 表示泛型

输入=>输出

元素拼接集合   ::

集合拼接集合   :::  两个集合是list类型

:+ 在尾部追加元素     + :在头部

++   连接两个集合

Flateen  平坦化  List(list(1,2,3),List(12,23))-àList(1,2,3,12,23)

将嵌套的结构展开,将里面的每个list去掉

 

Map

Groupby:就是把一个东西变成map

List.apply()  创建一个list对象,一般apply()省略不写

Seq(类似于list集合)  有先后次序的序列    indexedseq

Set  不可重复,但是无序的集合,list是可重复,有序的集合

Map 存放,keyvalue键值对构成的对偶的映射,sortedMap  map中可以嵌套集合

Scala所有集合都扩展了iterable特质

Foreach() 遍历   提交任务

 

Scala可变集合

  1. 数组 Array(1,2,3)长度固定,数值可变
  2. ListBuffer(类似于Java中的ArrayList) 添加+=   删除  remove
  3. Hashmap  更新/添加   +=(”k1”->”k2”)

List中的一些方法

.distinct 去重

.sortwith 以字典序排序

.intersect 交集

scala隐式转换

背景:

设计模式中有代理模式,可以增强一个类的功能。

java中有静态代理和动态代理。但实现起来繁琐。

scala中的隐式转换可以方便的实现代理。

 

定义:

当被代理类调用了一个不存在方法或者值的时候,scala编译器会查看调用上线文,查找是否存在该方法或者值。如果有则会隐式的将被代理类转换成代理类。继而执行方法或者值。

 

实例:

scala中的Int 有很多方法,都是通过将Int 隐式转换为RichInt来实现。

 

关键字:

implicit(隐式地)

 

使用:

三大隐式转换:隐式类,隐式函数,隐式参数

 

代码:

object ImplicitDemo {

  class Dog{

    def sing={

      println("wang wang wang")

    }

  }

  //定义隐式函数需要需要加上implicit关键字

  implicit def dogToString(dog: Dog)="dog"

  //定义隐式类需要需要加上implicit关键字

  implicit class RichDog(dog: Dog){

    def singOpera={

      println("bei jing opera")

    }

    //定义隐式值需要需要加上implicit关键字

    def say(implicit a:Int)=println(a)

  }

  def main(args: Array[String]): Unit = {

      new Dog().sing

    //隐式类转换

      new Dog().singOpera

    //隐式函数转换

      println(new Dog()+"abc")

    //隐式值

      implicit val a=1;

      new Dog().say

  }

}

注意:

如果隐式类跟被代理类不在同一个包中,需要导入隐式类所在的包

作用

不修改原有代码,扩展功能  实现代理

当被代理类调用一个其没有的方法和属性时,不会直接报错,scala编译器

会先查看上下文,查找是否有该方法或者属性,则会隐士的将代理类(含有该

或属性的类转化成代理类)

 

隐士类  implicit  class 类名(参数)

隐士函数  implicit  def  函数名(参数)

隐士属性  implicit  val  参数名=值 

上面的参数:表示要被转换的对象

 

Import  spark.implicit._

隐士类与被代理类不在同一个包中,需要导入隐士类所在的包

 

Scala模式类和模式匹配

背景:在开发中需要定义pojo类来封装业务对象。一个pojo是有一系列字段以及set,get方法组成的。在java中,需要通过IDE帮我们生成set get 构造 toString 等方法,相对繁琐。scala简化了pojo代码的编写。

相当于Java中的pojo  (case class)

定义模式类

Case class  类名(字段1:类型,a:String)

使用模式类

直接  new  类名(参数1,参数。。。。)

模式匹配

def myPrint(any: Any)={

    any match{

      case 1=>println("this is num "+any)

      case string:String=>println("this is string "+any)

      case int:Int=>println("this is int "+any)

      case Dog("luck",12)=>new Student().run

      case Dog("jack",12)=>new Student().run("jack")

      case Dog(name,age)=>new Student().sing()

      case _=>println("default")

    }

  }

值、类型、对象

 

Scala与Java互相调用

类型只有一个String一致

 

在Java中不能使用scala集合,不可高级函数的调用,可将scala集合放在Java方法中

Scala调用Java API(集合、io、网络、第三方依赖)只需遵循 scala的规范即可

Java集合转成scala集合  .asScala

Scala集合转成Java集合  .asJava

Scala集合比Java集合强大,一般不调用

 

Scala--IO

flatMap=flattent+map

map 对集合的转换

foreach  遍历集合,适用于io

读取文本文件  source.fromFile(“”).mkstring

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

脸ル粉嘟嘟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值