if (cubeNames.size > 0) {
//Do something
}
Intellij建议将其替换为:
if (cubeNames.nonEmpty) {
//Do something
}
现在函数nonEmpty被定义为:
def nonEmpty: Boolean = !isEmpty
这是对另一个函数的调用!
这一切真的有必要且实用,有效吗?
答案 0 :(得分:8)
.size
需要浏览整个集合以确定其大小,而.isEmpty
只需找到一个元素即可返回false
。
对于小型收藏品来说,这可能不会太重要(但你仍然应该这样做)。但是,对于大量的收藏品,会有很大的不同。
更糟糕的是,如果集合是无限的(例如val s:Stream[Int] = 0 #:: s
),那么.size
将永远不会终止,而.isEmpty
将会终止。
答案 1 :(得分:1)
我认为read code
比evaluate code
容易得多。这就是为什么代码list.nonEmpty
可能只有一个与list.size > 0
不同的含义。