scala基础——getOrElse()方法

getOrElse() 主要就是防范措施,如果有值,那就可以得到这个值,如果没有就会得到一个默认值,函数签名如下:

def getOrElse[B1 >: B](key : A, default : => B1) : B1 = { /* compiled code */ }

从API中可以看出,传入的参数是(key,default)这种形式,返回值是:如果有key那就get(key),如果没有,就返回default。

我们再来看看 get() 方法:

def get(key : A) : scala.Option[B] = { /* compiled code */ }

传入一个key,得到这个key的映射。注意:如果单独调用get()方法,这里返回的是一个Option,如果要返回值需要继续get:get().get

举个例子:

object Test5 {
  def main(args: Array[String]): Unit = {
    var map=Map[Int,String]()
    map+=(1->"one",2->"two")
    println(map.getOrElse(1,"default"))
    println(map.getOrElse(2,"default"))
    println(map.getOrElse(3,"default"))
  }
}

得到的结果:

one
two
default

当想要获取1,2的value的时候,由于map中有值,是可以获得的。而想获得3的值时,由于map中不存在,只能获得默认值default。

### 关于 Scala 中 `Option` 的用法 在 Scala 编程语言中,`Option` 是一种用于处理可能为空值的数据结构。它通过封装两种状态——存在值 (`Some`) 和不存在值 (`None`) 来提供更安全的方式替代传统的 null 值检查机制[^1]。 #### 什么是 `Option`? `Option` 类型是一个容器类型,表示可能存在或者不存在的值。它的两个子类型分别是: - **`Some[T]`**: 表示包含某个具体类型的值。 - **`None`**: 表示不包含任何值。 这种设计使得开发者能够显式地表达某些变量可能会缺失的情况,从而减少因空指针异常引发的错误。 #### 如何创建 `Option`? 可以通过以下几种方式创建 `Option` 对象: ```scala val someValue: Option[Int] = Some(42) // 创建一个包含整数 42 的 Option 实例 val noValue: Option[String] = None // 创建一个不含任何字符串值得 Option 实例 ``` #### 基本操作方法 以下是几个常用的针对 `Option` 进行的操作及其解释: 1. **`getOrElse(default)`** 如果 `Option` 包含实际值,则返回该值;否则返回指定默认值。 ```scala val result = someValue.getOrElse(0) // 返回 42 ``` 2. **`isDefined` / `isEmpty`** 判断是否存在有效值或是否为空。 ```scala println(someValue.isDefined) // 输出 true println(noValue.isEmpty) // 输出 true ``` 3. **`map(f)`** 当前 `Option` 存在值时应用给定函数 f 并返回新的 `Option`; 否则直接返回 `None`. ```scala val doubled = someValue.map(_ * 2) // 结果为 Some(84) ``` 4. **`flatMap(f)`** 类似 map, 不过其内部会自动解包嵌套层 (即从 Option[Option[A]] 转化成 Option[A]). ```scala def getSquare(x: Int): Option[Int] = Some(x*x) val squaredAndDoubled = someValue.flatMap(getSquare).map(_*2) // 结果为 Some(336) ``` 5. **`foreach(f)`** 遍历并执行副作用动作(如打印),仅当选项非空时才生效。 ```scala someValue.foreach(v => println("The value is:" + v)) ``` 以上就是有关如何利用 Scala 提供的功能强大又灵活易懂的 Optional 容器的一些基本概念与实践技巧[^2]. #### 示例代码展示 下面给出一段综合运用上述知识点的小例子: ```scala object OptionExample { def divide(a: Double, b: Double): Option[Double] = if(b != 0) Some(a/b) else None def main(args: Array[String]): Unit = { val dividend = 10d val divisor = 2d val divisionResult = divide(dividend,divisor) divisionResult match{ case Some(result) => println(s"$dividend divided by $divisor equals ${result}") case None => println("Division failed due to zero denominator.") } } } ``` 此程序演示了除法运算过程中可能出现零作分母的情形,并借助 `Option` 成功规避潜在风险的同时保持逻辑清晰简洁明了.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值