Настройка памяти, вероятно, является хорошим способом, как уже было предложено, потому что это дорогостоящая операция, которая масштабируется уродливо. Но, возможно, некоторые изменения кода помогут.
В вашей комбинированной функции вы можете использовать другой подход, который избегает операторов if
с помощью функции combinations
. Я также преобразовал бы второй элемент кортежей в двойные операции перед комбинацией:
tuples.
// Convert to doubles only once
map{ x=>
(x._1, x._2.toDouble)
}.
// Take all pairwise combinations. Though this function
// will not give self-pairs, which it looks like you might need
combinations(2).
// Your operation
map{ x=>
(toKey(x{0}._1, x{1}._1), x{0}._2*x{1}._2)
}
Это даст итератор, который вы можете использовать downstream или, если хотите, преобразовать в список (или что-то) с toList
.
Я делал то же самое на GitHub: abl-profiler-converter
. Я получаю отчет, передавая выходные данные Cobertura xml в задача генератора отчетов, такая как эта: ReportGenerator