如何在grails的这种情况下使用map?

时间:2013-05-20 14:06:37

标签: loops grails collections groovy hashmap

我需要显示在ec2上运行的服务器信息。我已经设法将它们显示为json,但现在我只需要显示某些字段。以下显示了我如何显示statusCodeRunType。类似的概念适用于其他领域。

  def check = reservations.each { Reservation reservation ->
        reservation.instances.each() { Instance instance ->
            def code = instance.state
            def StatusCode = code.code
//Get other values


            instance.tags.each() { Tag tag5 ->
                def KeyName2 = tag5.key;
                if (KeyName2 == 'RunType') {
                    def RunType = tag5.value;
                }
            }
       }

instance.tags.each() { Tag tag2 ->

                def KeyName2 = tag2.key;

                if (KeyName2 == 'RunType') {
                    def value2 = tag2.value;                    }
            }

            instance.tags.each() { Tag tag3 ->

                def KeyName3 = tag3.key;

                if (KeyName3 == 'StartedBy') {
                    def value = tag3.value;
                }
            } 

我想获得这样的东西在我的gsp页面中显示并为每个服务器循环它。

def map = [StatusCode:"80", RunType:"Always", value"test", value2:"abc"]

但是当我通过代码获取它们时,不确定如何向地图添加值

2 个答案:

答案 0 :(得分:1)

您可以使用此功能:

def result = reservations.collectMany { reservation ->
  reservation.instances.collect { instance ->
    [ StatusCode: instance.code,
      RunType   : instance.tags.find { it.key == 'RunType' }?.value,
      StartedBy : instance.tags.find { it.key == 'StartedBy' }?.value ]
  }
}

更新问题后更新

答案 1 :(得分:0)

从代码看起来,statusCode可以有多个value5。如果情况并非如此,那么您可以执行以下操作:

def myList = []
def check = reservations.each { Reservation reservation ->
                reservation.instances.each() { Instance instance ->
                def statusCode = instance.state?.code
                def value5 = instance.tags?.find{it.key == 'RunType'}?.value
                myList << ["StatusCode": statusCode, "RunType": value5 ]
           }
      }

注意内循环是简化的。我不确定它是否符合您的用例场景,因为存在内部循环。如果您认为地图需要在循环内向下移动一级,那么您还要在列表中维护一个键值对(或地图)的列表。

使用groovy的collectinject功能可以过度简化逻辑。