значения суммы foldLeft с начальным значением BigDecimal.ZERO - PullRequest
2 голосов
/ 27 сентября 2019

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

employeeList.foldLeft(java.math.BigDecimal.ZERO) { (accSal,emp) => accSal + getSalary(emp,designation,yearsOfExp) }

Здесь для каждого сотрудника я хочу вызвать функцию getSalary и суммировать возвращаемые значения, чтобы получить зарплаты всех сотрудников

Мне кажется, что приведенный выше код не работает, постоянно получаю сообщение об ошибке

Type mismatch expected:String actual:BigDecimal

Ответы [ 2 ]

5 голосов
/ 28 сентября 2019

Альтернатива ответу Марио, если getSalary возвращает java.math.BigDecimal, а fold также должен возвращать один вместо scala.math.BigDecimal.
. Вы можете сделать это:

employeeList.foldLeft(java.math.BigDecimal.ZERO) {
  (accSal, emp) =>
    accSal.add(getSalary(emp,designation,yearsOfExp))
}

Вы можете проверить javadoc , чтобы подтвердить, что у них нет + метода, но add.
И по этой причине он вызывал+ метод, который возвращает Strings .

4 голосов
/ 27 сентября 2019

Попробуйте scala.BigDecimal(0) вместо java.math.BigDecimal.ZERO, возможно, что-то вроде этого

employeeList.foldLeft(BigDecimal(0)) { (accSal, emp) => accSal + getSalary(emp) }
...