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

在scala中的理解表现

发布时间:2020-12-16 19:03:47 所属栏目:安全 来源:网络整理
导读:我有一个关于 scala中的理解效率的问题. 当perm是550个元素的列表时,以下代码运行大约45秒 perm = some listfor{ perm - perms.withFilter(_.size 0) wordList = somefunction(perm) //expensive operation,wordlist is a list of strings sentenceList = so
我有一个关于 scala中的理解效率的问题.

当perm是550个元素的列表时,以下代码运行大约45秒

perm = some list
for{
   perm <- perms.withFilter(_.size > 0)
   wordList = somefunction(perm) //expensive operation,wordlist is a list of strings
   sentenceList = somefunction1(perm) //very expensive operation,sentenceList is a list of list of strings
   word <- wordList
   sentence <- sentenceList
} yield { word::sentence}

当我将以下代码更改为以下代码时,以相同的perm列表运行3秒

perm = some list
for{
   perm <- perms.withFilter(_.size > 0)
   word <- somefunction(perm) //expensive operation
   sentence <- somefunction1(perm) //very expensive operation
} yield { word::sentence}

性能差异与Scala中的懒惰评估有关吗?

解决方法

让我们脱口而出:

1.)

perms.withFilter(_.size > 0).flatMap { perm =>
  val wordList = somefunction(perm) //expensive operation
  val sentenceList = somefunction1(perm) //very expensive operation
  wordList.flatMap { word =>
    sentenceList.map { sentence =>
      word::sentence
    }
  }
}

2.)

perms.withFilter(_.size > 0).flatMap { perm =>
  somefunction(perm).flatMap { word =>
    somefunction1(perm).map { sentence =>
      word :: sentence
    }
  }
}

在第一种情况下,每次都将执行昂贵的功能.在第二种情况下,当某个函数(perm)返回一个空的结果时,一些函数1(perm)将永远不会被执行.

(编辑:李大同)

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

    推荐文章
      热点阅读