Я пытаюсь сохранить значения узлов ответа XML на карте, но это ДЕЙСТВИТЕЛЬНО сложно. Вот XML:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<SearchRS>
<SearchStatus>SUCCESS</SearchStatus>
<Itinerary>
<Name>Joe</Name>
<Ticket>111.11</Ticket>
<Taxes>1.11</Taxes>
</Itinerary>
<Itinerary>
<Name>Bob</Name>
<Ticket>222.22</Ticket>
<Taxes>2.22</Taxes>
</Itinerary>
<Itinerary>
<Name>Joe</Name>
<Ticket>333.33</Ticket>
<Taxes>3.33</Taxes>
</Itinerary>
<Itinerary>
<Itinerary>
<Name>Bob</Name>
<Ticket>444.44</Ticket>
<Taxes>4.44</Taxes>
</Itinerary>
<Name>Joe</Name>
<Ticket>0.0</Ticket>
<Taxes>0.0</Taxes>
</Itinerary>
</SearchRS>
Мне нужно рассчитать средний билет + налоги для каждого имени.
Примечание. Любое значение 0,0 должно быть исключено из среднего значения.
Я хочу создать карту, которая будет содержать следующее:
[ name : average of ticket+taxes value]
То, что я пробовал, это найдет минимальное значение для каждого, документ. Маршрут содержит ответ XML.
def minByName = doc.Itinerary
.inject([:].withDefault { [] }) { map, it ->
map[it.Name.text()] << it
map
}
.collectEntries { profile, nodes ->
[profile, nodes.min { it.Ticket.text() as Double }]
}
def nameList = []
minByName.each { profile, minimum ->
Map nameMap = [:]
nameMap.name = profile
nameMap.ticket = minimum.Ticket.toString()
nameMap.taxes = minimum?.Taxes
nameList << nameMap
}
log.info("Cheapest ticket and tax per name: " + nameList)
Что приведет к набору данных для каждого имени:
[[name:Joe, ticket:111.11, taxes:1.11], [name:Bob, etc...]]
Вместо минимума я хочу, чтобы значения на карте были средними, например, для всех билетов Джо + налоги.
Что бы выглядело так:
[[name:Joe, averageCost:224.44], [name:Bob, averageCost...]]
111,11 + 1,11 = 112,22, 333,33 + 3,33 = 336,66. 112,22 + 336,66 = 448,88. 448,88 / 2 = 224,44
Я действительно застрял на этом, любая помощь очень ценится!