Сбор и форматирование Groovy карт - PullRequest
0 голосов
/ 15 мая 2018

У меня есть еще один вопрос на карте. Это вопрос формата карты, и я не могу понять это правильно. Вот XML:

 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <SearchRS>
     <SearchStatus>SUCCESS</SearchStatus>
     <Itinerary>
         <Carrier>Joe</Carrier>
         <Total>111.11</Total>
         <Duration>111</Duration>
     </Itinerary>
     <Itinerary>
         <Carrier>Bob</Carrier>
         <Total>222.22</Total>
         <Duration>222</Duration>
     </Itinerary>
     <Itinerary>
         <Carrier>Joe</Carrier>
         <Total>333.33</Total>
         <Duration>333</Duration>
     </Itinerary>
     <Itinerary>
     <Itinerary>
          <Carrier>Bob</Carrier>
          <Total>444.44</Total>
          <Duration>444</Duration>
     </Itinerary>
          <Carrier>Joe</Carrier>
          <Total>234.10</Total>
          <Duration>167</Duration>
     </Itinerary>
 </SearchRS>

Я хочу создать простую карту, которая бы выглядела так:

[[перевозчик: Джо, стоимость: 111.11, продолжительность: 111], [перевозчик: Боб, стоимость: 222.22, продолжительность: 222], [перевозчик: Джо, стоимость: 333.33, продолжительность: 333], [перевозчик: Боб , стоимость: 444.44, продолжительность: 444], [перевозчик: Джо, стоимость: 234.10, продолжительность 167]]

То, что я вижу, это:

[[Джо: [111.11, 333.33, 234.10], Боб: [222.22, 444.44]]

Это мой код такой, какой он есть;

 def carriers = [:]
 for (name in doc.'**'.findAll { it.name() == 'CarrierCode' }.unique()) {
        carriers[name] = doc.'**'.findAll { it.name() == 'Itinerary' && name == it.CarrierCode.text() }.collect {
        Double.parseDouble(it.DisplayTotal.text()) + Double.parseDouble(it.Duration.text())
      }
 }
 log.info("map is " + carriers)

Мне нужна помощь на этих картах, пока я не попаду в классный класс, я действительно застрял в этих вещах, и вся помощь очень ценится!

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

вы хотите построить не просто карту, а список карт

def xml='''<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <SearchRS>
     <SearchStatus>SUCCESS</SearchStatus>
     <Itinerary>
         <Carrier>Joe</Carrier>
         <Total>111.11</Total>
         <Duration>111</Duration>
     </Itinerary>
     <Itinerary>
         <Carrier>Bob</Carrier>
         <Total>222.22</Total>
         <Duration>222</Duration>
     </Itinerary>
     <Itinerary>
         <Carrier>Joe</Carrier>
         <Total>333.33</Total>
         <Duration>333</Duration>
     </Itinerary>
     <Itinerary>
     <Itinerary>
          <Carrier>Bob</Carrier>
          <Total>444.44</Total>
          <Duration>444</Duration>
     </Itinerary>
          <Carrier>Joe</Carrier>
          <Total>234.10</Total>
          <Duration>167</Duration>
     </Itinerary>
 </SearchRS>'''
def doc=new XmlSlurper().parseText(xml)
doc.Itinerary.collect{
    [
        carrier:  it.Carrier,
        cost:     it.Total.toBigDecimal(),
        duration: it.Total.toBigDecimal(),
    ]
}
0 голосов
/ 15 мая 2018

Попробуйте с этим кодом:

def root = new XmlSlurper().parse(new File ('/tmp/stack.xml'))

List <Map> totalresult = []

root.'**'.findAll{ it.name() == 'Itinerary'}.each{

    Map temp = [:]

    temp [it.Carrier.name()] = it.Carrier.text()

    temp [it.Total.name()] = it.Total.text()

    temp [it.Duration.name()] = it.Duration.text()

    totalresult << temp
}

println totalresult
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...