scala-Option

12 篇文章 0 订阅

src

scala完全面向对象,本身没有null这个概念,为了跟java整合,才允许java的null出现。scala使用None来描述这个状态。那么在代码中如何使用呢?
涉及到的操作:

  1. 方法返回值:Unit
  2. Nothing
  3. Nil
  4. None
  5. Null null

Option类似于IO流,主要封装动作,Option把非空判断的行为进行了封装。Option本身就是个容器,也有容器接口的一些方法,当然这些方法正常是用不到的。Option就是个None判断器,无论什么对象,只要扔进去,就能通过其API判断这个对象是否为None,类似于验钞机。

traps

1. 巨坑!!!Option的isDefined和isEmpty是根据是否是Some对象返回boolean,但Some(null)返回的仍然是Some对象,所以isDefined返回的是true。因此,判断一个可能为的对象是否为空时,一定要用Option来封装

  @Test
  def testNull(): Unit = {
    println(Some(null).getClass + " | " + Some(null).isDefined) //输出:scala.Some | true
    println(Option(null).getClass) //输出:scala.None$
  }

错误示范

在这里插入图片描述

正确示范

在这里插入图片描述

com

只有2个实例,Some和None,表示有和无,只要是Option类型的变量,都可以接收Some和None实例。
一个变量是Option类型,就表示这个变量有可能是None,这个变量里面可以获取到希望得到的对象。是对对象的装饰。

是个用来处理非空判断逻辑的容器。只要是有可能为的,都可以放到这里面来,朝外拿的时候,就已经完成为非空判断,只需要调用API得到结果即可。类似于验钞机,不管真假钞,都可以放进去,取的时候,就能知道放进去的是真是假了。

usage

fundesc
getNone调用会报错NoSuchElementException
getOrElse
isEmpty检测可选类型值是否为 None,是的话返回 true,否则返回 false
isDefined如果可选值是 Some 的实例返回 true,否则返回 false
exists如果可选项中指定条件的元素存在且不为 None 返回 true,否则返回 false
map

example

{1} 声明一个变量,然后根据情况赋值。

编程中最常遇到的一个逻辑,

String str = null;
if (true) str = "a"; else str = "b";
str.xxx;

java中好解决,因为有null。scala中也可以使用null,但更规范的用法是使用Option类型的None来表示当前变量仅仅是个空壳,没有意义。
scala:如果为true,就赋Some(RDD),否则,赋另外1个RDD。需要拐弯的就是变量的类型是个Option,RDD是包装在里面的。

var opRdd:Option[RDD[Int]] = None//这里一定要显式的声明类型,不然会认为是None类型。

if(1 + 1 == 2){
  opRdd = Option(sc.parallelize(1 to 10 ))
  //或者 opRdd = Option(sc.parallelize(1 to 10 ))
}
 
println(opRdd.getOrElse(sc.parallelize(11 to 20 )).foreach(println(_)))

{2} 有时java代码确实返回了null,此时可以用Option(null)把null转成scala的None

println(Option(null).equals(None)) //true
println(Option(null)) //true
println(None) //true

{3} Option对象进行match

option match {
  case Some(name) => println(s"Received donut name = $name")
  case None       => println(s"No donut name was found!")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值