大数据高频面试题-Scala

4.9 Scala

  • 4.9.1 元组 
  • 4.9.2 隐式转换
  • 4.9.3 函数式编程理解 
  • 4.9.4 样例类 
  • 4.9.5 柯里化 
  • 4.9.6 闭包 
  • 4.9.7 Some、None、Option的正确使用 

4.9.1 元组

1)元组的创建

val tuple1 = (1, 2, 3, "heiheihei")

println(tuple1)

2)元组数据的访问,注意元组元素的访问有下划线,并且访问下标从1开始,而不是0

val value1 = tuple1._4

println(value1)

3)元组的遍历

方式1:

for (elem <- tuple1.productIterator  ) {

   print(elem)

}

println()

方式2:

tuple1.productIterator.foreach(i => println(i))

tuple1.produIterator.foreach(print(_))

 

4.9.2 隐式转换

隐式转换函数是以implicit关键字声明的带有单个参数的函数。这种函数将会自动应用,将值从一种类型转换为另一种类型。

implicit def a(d: Double) = d.toInt

//不加上边这句你试试

val i1: Int = 3.5

println(i1)

 

4.9.3 函数式编程理解

1Scala中函数的地位:一等公民 
2Scala中的匿名函数(函数字面量) 
3Scala中的高阶函数 
4Scala中的闭包 
5Scala中的部分应用函数 
6Scala中的柯里化函数

 

4.9.4 样例类

case class Person(name:String,age:Int)

一般使用在 ds=df.as[Person]

 

4.9.5 柯里化

函数编程中,接受多个参数的函数都可以转化为接受单个参数的函数,这个转化过程就叫柯里化,柯里化就是证明了函数只需要一个参数而已。其实我们刚的学习过程中,已经涉及到了柯里化操作,所以这也印证了,柯里化就是以函数为主体这种思想发展的必然产生的结果。

1)柯里化的示例

def mul(x: Int, y: Int) = x * y

println(mul(10, 10))

def mulCurry(x: Int) = (y: Int) => x * y

println(mulCurry(10)(9))

def mulCurry2(x: Int)(y:Int) = x * y

println(mulCurry2(10)(8))

2)柯里化的应用

比较两个字符串在忽略大小写的情况下是否相等,注意,这里是两个任务:

  1. 全部转大写(或小写)
  2. 比较是否相等

针对这两个操作,我们用一个函数去处理的思想,其实无意间也变成了两个函数处理的思想。示例如下:

val a = Array("Hello", "World")

val b = Array("hello", "world")

println(a.corresponds(b)(_.equalsIgnoreCase(_)))

其中corresponds函数的源码如下:

def corresponds[B](that: GenSeq[B])(p: (A,B) => Boolean): Boolean = {

 

val i = this.iterator

 

val j = that.iterator

 

while (i.hasNext && j.hasNex  t)

 

  if (!p(i.next(), j.next()    ))

 

    return fals

!i.hasNext && !j.hasNext

}

尖叫提示:不要设立柯里化存在义这样的命题,柯里化,是面向函数思想的必然产生结果。 

 

4.9.6 闭包

一个函数把外部的那些不属于自己的对象也包含(闭合)进来。

案例1:

def minusxy(x: Int) = (y: Int) => x - y

这就是一个闭包:

1) 匿名函数(y: Int) => x -y嵌套在minusxy函数中。

2) 匿名函数(y: Int) => x -y使用了该匿名函数之外的变量x

3) 函数minusxy返回了引用了局部变量的匿名函数

案例2

def minusxy(x: Int) = (y: Int) => x - y

val f1 = minusxy(10)

val f2 = minusxy(10)

println(f1(3) + f2(3))

此处f1,f2这两个函数就叫闭包。

 

4.9.7 Some、None、Option的正确使用

val map = Map("Tom"-> 23)

map("Jack") // 抛出异常 java.util.NoSuchElementException: key not found: Jack

map.get("Jack") // None

map("Tom") // 23

map.get("Tom") // Some(23)

 

使用模式匹配取出最后结果

val optionAge = map.get("Tom")

val age = optionAge match {

 case Some(x) => optionAge.get

 case None => 0

}

 


注:内容源自“尚硅谷”网络公开资源整理

—— 温故而知新,可以为师矣。

 

你可能感兴趣的:(Scala,大数据知识点梳理)