Search code examples
groovy

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


Solution

  • 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"