Reputation: 160
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
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