У меня есть один ArrayList, который содержит более 45 000 записей.Я хочу создать новый список, который будет содержать сумму всех значений, когда в списке присутствует комбинация идентификатора и значения имени.Например, ниже мой входной список.Я создаю этот список, читая файл xls и сохраняя его в одной переменной с именем "myList" -
[
{ID=481, name =ABCD, value=100},
{ID=481, name =ABCD, value=50},
{ID=2053, name =XYZ, value=300}
]
Мой код -
%dw 1.0
%output application/java
%function getIdname(ID, name) (ID ++ " - " ++ name)
%function addAllValues(ID, name) sum ((flowVars.myList.Data filter (getIdname($.ID,$.name) == getIdname(ID, name))).value)
---
{
Data: flowVars.myList.Data map ((payload01 , indexOfPayload01) -> {
ID: payload01.ID,
name: payload01.name,
finaValue : addAllValues(payload01.ID, payload01.name)
})
}
Вывод -
Data=[
{ID=481, name =ABCD, finalValue=150},
{ID=2053, name =XYZ, finalValue=300}
]
Здесь я получаю желаемый вывод, как указано выше, для файла с 5 или 10 записями.Но если я использую реальный файл с более чем 45 000 записей, выполнение моего кода занимает слишком много времени и не создает никаких выходных данных.Кроме того, я не получаю никаких исключений.Может кто-нибудь подсказать, что я здесь делаю не так.Почему требуется столько времени для подведения итогов равных записей.Я проверил это в течение 40 минут, но все еще не получил никакого вывода