加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala最佳做法:简单的Option []用法

发布时间:2020-12-16 19:01:39 所属栏目:安全 来源:网络整理
导读:作为一个 Java到Scala切换器,我经常发现自己重写空处理东西,如 val itemOpt: Option[Item] = items.get(coords) // "items" is something like a Mapif (itemOpt.isDefined) { val item = itemOpt.get // do something with item,querying item fields a lot
作为一个 Java到Scala切换器,我经常发现自己重写空处理东西,如

val itemOpt: Option[Item] = items.get(coords) // "items" is something like a Map
if (itemOpt.isDefined) {
  val item = itemOpt.get
  // do something with item,querying item fields a lot of times,for example
  if (item.qty > 10) {
    storeInVault(item.name,item.qty,coords)
  } else {
    storeInRoom(item)
  }
}

我想这看起来很丑陋,它看起来像是从Java的一个代码重写的:

Item item = items.get(coords);
if (item != null) {
  // do something with item,for example
}

它在Java中看起来也很丑陋,但至少它是一条线.在Scala中处理这种简单案例的最佳做法是什么?我已经知道flatMap并且平坦化来处理Option [Stuff]的集合,我知道getOrElse来处理默认值.我梦想着像:

items.get(coords).doIfDefined(item =>
  // do stuff with item
)

但是我在Option API中看不到任何东西.

解决方法

非常受欢迎的使用模式:

val item: Option[Int] = None
val result = item map (_ + 1) getOrElse 0

所以你只需使用map来转换值,如果它被定义.

如果您只想使用值,则存储在Option中,那么只需使用foreach:

item foreach { it =>
    println(it)
}

您可以看到,Option还支持许多收集方法,因此您实际上不需要学习新的API.您可以将其视为具有1或0个元素的集合.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读