javagroovykatalon-studiowebharvest

How can I add the next list to do a sum and avarage?


I got the following code:


    def arrayOfInts = [actual_speed_mobile_1.toInteger(), actual_speed_mobile_2.toInteger(), actual_speed_mobile_3.toInteger(), actual_speed_mobile_4.toInteger(), actual_speed_mobile_5.toInteger()]
    
    "this is **important** if we use removeAt"
    Collections.sort(arrayOfInts)
    
    def min = Collections.min(arrayOfInts);
    WebUI.comment("our min value is " + min.toString())
    
    def max = Collections.max(arrayOfInts);
    WebUI.comment("our max value is " + max.toString())
    
    WebUI.comment("our list of values are " + arrayOfInts.toString())
    
    arrayOfInts.removeAt(0);
    WebUI.comment("our list of values are " + arrayOfInts.toString())
    
    if (min != max) {
        arrayOfInts.removeAt(arrayOfInts.size() - 1);
        WebUI.comment("our list of values are " + arrayOfInts.toString())
        }
    WebUI.comment("our values are " + arrayOfInts.toString())

The output is:

    arrayOfInts = [actual_speed_mobile_1.toInteger(), actual_speed_mobile_2.toInteger(), actual_speed_mobile_3.toInteger(), actual_speed_mobile_4.toInteger(), actual_speed_mobile_5.toInteger()]
    
    Collections.sort(arrayOfInts)
    
    in = Collections.min(arrayOfInts)
    comment("our min value is " + min.toString())
    our min value is 74
    
    max = Collections.max(arrayOfInts)
    comment("our max value is " + max.toString())
    our max value is 86
    
    comment("our list of values are " + arrayOfInts.toString())
    our list of values are [74, 82, 83, 84, 86]
   
    arrayOfInts.removeAt(0)
   comment("our list of values are " + arrayOfInts.toString())
    our list of values are [82, 83, 84, 86]
    
    if (min != max)
    arrayOfInts.removeAt(arrayOfInts.size() - 1)
    
    comment("our list of values are " + arrayOfInts.toString())
    
    our list of values are [82, 83, 84]

I want the list to do average I was thinking to add it into a new variable and transform it to inter but I got error:

Reason:
groovy.lang.MissingMethodException: No signature of method: java.util.ArrayList.toInterger() is applicable for argument types: () values: []
    at Aspire_cashout.run(Aspire_cashout:115)

Solution

  • Your code can be rewritten in somewhat more idiomatic groovy as for example:

    //def arrayOfInts = [actual_speed_mobile_1.toInteger(), actual_speed_mobile_2.toInteger(), actual_speed_mobile_3.toInteger(), actual_speed_mobile_4.toInteger(), actual_speed_mobile_5.toInteger()]
    def strings = ["1", "2", "3", "4", "5"]
    def ints = strings.collect { it as Integer}.sort()
    println "ints: $ints"
    
    ints.removeAt(0)
    println "ints: $ints"
    
    if (ints.min() != ints.max()) {
      // init returns a list of all elements except the last
      ints = ints.init()
    }
    
    println "ints: $ints"
    
    println "average: ${ints.average()}"
    
    def avg = ints.sum() / ints.size()
    println "average: ${avg} (groovy < 3.x)"
    

    where the iterable.average() method was introduced in groovy 3.0. If you are running a version of groovy older than that, you can use the ints.sum() / ints.size() construct.

    When executed (with groovy 3.x) the above code results in:

    ─➤ groovy -v
    Groovy Version: 3.0.6 JVM: 11.0.10 Vendor: Amazon.com Inc. OS: Linux
    
    ─➤ groovy solution.groovy
    ints: [1, 2, 3, 4, 5]
    ints: [2, 3, 4, 5]
    ints: [2, 3, 4]
    average: 3
    average: 3 (groovy < 3.x)
    
    ─➤ 
    

    Other relevant methods on iterable: init, tail, head, last.