在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)将永远不会被执行. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |