You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Groovy中判断列表所有元素是否相等的更优实现方法

判断列表所有元素是否相等的更优实现方式

我用以下代码判断给定列表中的所有元素是否相等:

def myList = [1, 2, 3, 4]
def myList2 = [1, 1, 1, 1]

def list1EqualVals = myList.collect{ it == myList[0] }.inject(true){it, tmp -> it == tmp}
def list2EqualVals = myList2.collect{ it == myList2[0] }.inject(true){it, tmp -> it == tmp}

println "List 1 has equal values: $list1EqualVals"
println "List 2 has equal values: $list2EqualVals"

这段代码能正常运行,输出结果是:

List 1 has equal values: false
List 2 has equal values: true

但我想知道有没有更优的实现方式,比如有没有类似list.containsAllEqualValues()的现成方法?


Groovy里没有直接叫containsAllEqualValues()的现成方法,但有几种更简洁高效的实现方式:

  • 使用every方法:这是最直观且高效的写法,every会在遇到第一个不相等的元素时就终止遍历,比原代码的collect+inject少了一次全量遍历和集合创建的开销:
def allEqual(List list) {
    if (list.isEmpty()) return true // 空列表的返回值可根据业务需求调整
    return list.every { it == list[0] }
}

def myList = [1, 2, 3, 4]
def myList2 = [1, 1, 1, 1]

println "List 1 has equal values: ${allEqual(myList)}"
println "List 2 has equal values: ${allEqual(myList2)}"
  • 利用unique方法:如果列表所有元素相等,去重后的集合长度会是1,这种写法代码更短,但unique会遍历整个列表并生成新集合,性能略逊于every:
def allEqual(List list) {
    list.unique().size() <= 1
}
  • 边界情况处理:原代码如果传入空列表会抛出IndexOutOfBoundsException,上面两种实现都做了空列表兼容,你可以根据实际业务场景决定空列表是返回true还是false。

内容的提问来源于stack exchange,提问作者Edu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 22:16:42