У меня есть один 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 минут, но до сих пор не получил никаких результатов