Итерация по нескольким циклам и вычисление итогов - PullRequest
0 голосов
/ 09 января 2019

Мне нужно пройтись по двум массивам и вычислить сумму зарплаты соответствующего имени сотрудника. У меня есть два массива: empData: [Emp1, Emp2] и salData: [[имя: Emp1, sal: 1000], [имя: Emp2, sal: 5000], [имя: Emp1, sal: 6000], [имя: Emp1, sal: 7000]]. Я должен пройти через empData а также salData и вычисление суммы зарплаты для соответствующего имени emp, а затем добавление имени пользователя и соответствующей зарплаты в массив.

double total
empData.each{x ->
   sapData.each{ y ->
       if(y.name == x)
       {
          total =total + y.sal;
       }
  }

Но при получении ошибки Невозможно привести объект 'null1000.0' с классом 'java.lang.String' к классу 'java.lang.Double'. Если я объявляю total как строку, то результатом является канкатенация sal.

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Тьфу, петли и петли ... взгляните на методы коллекции Groovy.

// poor emp3 has no salaryData
def employeeNames = ['emp1', 'emp2', 'emp3']
def salaryData = [[name: 'emp1', sal: 1000], [name: 'emp2', sal: 5000], [name: 'emp1', sal: 6000], [name:'emp1', sal: 7000]]
// here's our output array variable
def output = []
// for each employee
// find all the salaryData elements where salaryData.name == employeeName
// using that list, collect just the salary value
// using that list, sum it, adding to an initial value of 0
// append a new entry in output containing the name, and total salary 
employeeNames.each { employeeName ->
  output << [name: employeeName, totalSalary: salaryData.findAll { sal -> sal.name == employeeName }.collect { sal -> sal.sal }.sum(0)]
}
println output

groovyconsole дает: [[name: emp1, totalSalary: 14000], [name: emp2, totalSalary: 5000], [name: emp3, totalSalary: 0]]

0 голосов
/ 09 января 2019

Вы не инициализируете total ни к чему. Также возможно, что ваши значения зарплаты на самом деле являются строками; Трудно сказать из того, что вы предоставили.

Инициализируйте total равным 0 и убедитесь, что y.sal удвоено, если необходимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...