Как я могу добавить следующий список, чтобы сделать сумму и среднее значение?

Я получил следующий код:


    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())

Результат:

    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]

Я хочу, чтобы список был средним. Я думал добавить его в новую переменную и преобразовать в интер, но получил ошибку:

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)

person iollo    schedule 14.04.2021    source источник


Ответы (2)


Ваш код можно переписать в несколько более идиоматичном стиле, например:

//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)"

где iterable.average() метод был введен в groovy 3.0. Если вы используете более раннюю версию groovy, вы можете использовать конструкцию ints.sum() / ints.size().

При выполнении (с groovy 3.x) приведенный выше код приводит к следующему результату:

─➤ 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)

─➤ 

Другие соответствующие методы для итерации: init, хвост, head, последний.

person Matias Bjarland    schedule 16.04.2021
comment
Спасибо! Я использую Katalon, а Katalon использует groovy, но я не уверен, какую версию groovy он использует. - person iollo; 16.04.2021
comment
stackoverflow.com/questions/18876440/ - person Matias Bjarland; 17.04.2021
comment
Версия, которую я получил на Katalon: 2.4.7 - person iollo; 18.04.2021

Я добавляю это:

for(int i=0; i<arrayOfInts.size(); i++)
        total = total + arrayOfInts[i];
        
    }
WebUI.comment("our values are " + arrayOfInts.toString())
def avarage = total/arrayOfInts.size();
println(avarage.toString())

Может быть, я могу помочь кому-то

person iollo    schedule 15.04.2021