Edu
Edu

Reputation: 160

Groovy better way to find out if a list contains all equal values

I have the following code for checking if the values in a given list are all equal:

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"

which works and it prints:

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

but is there a better way of doing this? maybe some method I miss? like list.containsAllEqualValues() or similar

Upvotes: 0

Views: 809

Answers (1)

Marcin Kłopotek
Marcin Kłopotek

Reputation: 5961

You can convert the List into Set:

A collection that contains no duplicate elements.

and check its size(). If a resulting Set has only one element it means all the values in the List are the same.

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

def list1EqualVals = myList.toSet().size() == 1
def list2EqualVals = myList2.toSet().size() == 1

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

Alternatively, you can also use the native Groovy toUnique() method to achieve the same:

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

def list1EqualVals = myList.toUnique().size() == 1
def list2EqualVals = myList2.toUnique().size() == 1

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

Upvotes: 1

Related Questions