Как добавить все значения с одним и тем же годом в список? - PullRequest
0 голосов
/ 07 марта 2020

У меня есть список строк, который выглядит примерно так:

  • 2010 1 11,45
  • 2010 2 09.50
  • 2010 3 15,00
  • .
  • .
  • .
  • 2019 12 11.10

(список представляет собой список расходов в месяц в период между 2010 и 2019 годами)

Я разделил список на 3 списка для каждого значения, такого как:

for(....){

val part = list.get(i).split(" ")
val year = parts[0]
val month = parts[1]
val spend = parts[2]

yearlist.add(year)
monthlist.add(month)
spendlist.add(spend)
}

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

Я попробовал следующий метод, однако это дает мне исключение IndexOutOfBounds:

var totalspend = 0
for(i in 0..yearlist.size-1){

if(yearlist[i]==yearlist[i+1]){//i get an error here 
    totalspend = totalspend + spendlift[i]
}
else if(yearlist[i]!=yearlist[i+1]){
    totalspend = totalspend + spendlift[i]
    spendforyear.add(totals(year[i], totalspend))
    totalspend = 0.0
}

}

Я предполагаю, что ошибка в том, что я не могу сравнить окончательное значение годового списка с yearlist [i + 1], когда i + 1 выходит за пределы.

Как бы я go решил это?

1 Ответ

2 голосов
/ 07 марта 2020

Я бы предложил сохранить year, month и spend в data class, а затем использовать функции сбора:

data class Report(val year: String, val month: String, val spend: Double)

fun main() {

    val reports = listOf(
        Report("2010", "1", 11.45),
        Report("2010", "2", 09.50),
        Report("2010", "3", 15.00),
        Report("2019", "12", 11.10)
    )
    val groupedReports = reports.groupBy { it.year }
    val mostSpending = groupedReports.maxBy { it.value.sumByDouble { report -> report.spend } }
    println(mostSpending?.key) // year with the most spending
    println(mostSpending?.value?.sumByDouble { it.spend }) // the spending on that year
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...