Я не совсем уверен, что вы спрашиваете, но, похоже, ваши основные проблемы в том, что вам нужно группировать по дням, а также по счету, и вам нужна внутренняя карта из категории для суммирования по этой категории. Я не знаю, как вы обрабатываете вывод в электронную таблицу, но вам понадобится какой-то способ получить полный список категорий, если вы хотите правильно отформатировать его (и я полагаю, что полный список категорий может быть не представлен во входных данных, так что вам тоже нужно быть осторожным).
Если вы используете тип возврата Map[(Int, String), (Double, Double, Map[String, Double])]
для своей функции, где Int
- день, а внутренний Map
это от категории к сумме, тогда вы будете иметь данные в правильной форме. Чтобы метод соответствовал этой сигнатуре, вам нужно внести несколько изменений:
groupBy(t => (t.transactionDay, t.accountId))
, чтобы вы получили окно дня. Это не скользящее окно, но я не уверен, что вы на самом деле хотите скользящее окно в любом случае - дайте мне знать, если я ошибаюсь.
Переместите остальную часть кода внутрь одной функции mapValues
. (Не обязательно, но точнее, чем ваш текущий подход.)
Добавьте поле (внутри mapValues
, с максимальным и средним значениями), созданное с помощью другого groupBy
, но это время по категориям.