Groovy 获取包含在映射中的列表

Groovy 获取包含在映射中的列表,groovy,Groovy,我有以下代码: def bindingMap = [title: 'The Lamb Lies Down On Broadway', 'players[0]': [name: 'Steve Hackett'], 'players[1]': [name: 'Peter Gabriel'], 'players[2]': [name: 'Tony Banks']] 我想从上面的地图上找到“阵法

我有以下代码:

def bindingMap = [title: 'The Lamb Lies Down On Broadway',
                  'players[0]': [name: 'Steve Hackett'],
                  'players[1]': [name: 'Peter Gabriel'],
                  'players[2]': [name: 'Tony Banks']]
我想从上面的地图上找到“阵法”玩家。 因此,下面这句话会起作用:

def players = bindingMap.players
assert players == [[name: 'Steve Hackett'], [name: 'Peter Gabriel'], [name: 'Tony Banks']]

感谢您的帮助

在此特定地图结构中,您可以
查找以
players
开头的
条目,然后从这些条目中收集

def bindingMap = [title: 'The Lamb Lies Down On Broadway',
                  'players[0]': [name: 'Steve Hackett'],
                  'players[1]': [name: 'Peter Gabriel'],
                  'players[2]': [name: 'Tony Banks']]

def players = bindingMap
    .findAll { key, value -> key.startsWith("players") }*.value
assert players == [
    [name: 'Steve Hackett'], [name: 'Peter Gabriel'], [name: 'Tony Banks']]

在此特定地图结构中,您可以
findAll
条目,其键以
players
开头,然后从这些条目中收集

def bindingMap = [title: 'The Lamb Lies Down On Broadway',
                  'players[0]': [name: 'Steve Hackett'],
                  'players[1]': [name: 'Peter Gabriel'],
                  'players[2]': [name: 'Tony Banks']]

def players = bindingMap
    .findAll { key, value -> key.startsWith("players") }*.value
assert players == [
    [name: 'Steve Hackett'], [name: 'Peter Gabriel'], [name: 'Tony Banks']]

最初的问题并不表示这是关于Grails中的参数绑定,但问题后面的注释说明了这一点。因为这就是您正在做的事情,所以无需自己编写任何参数解析代码即可完成

// grails-app/controllers/demo/DemoController.groovy
package demo

class DemoController {

    def index(MyCommand command) {

        // command.people will be populated if the request
        // includes parameters like...
        //    people[0].name=Jeff
        //    people[0].town='St. Louis'
        //    people[1].name='Matt'
        //    people[1].town='San Jose'

        // ...
    }
}

class MyCommand {
    List<People> people
}

class People {
    String name
    String town
}
//grails-app/controllers/demo/DemoController.groovy
软件包演示
类控制器{
def索引(MyCommand命令){
//如果请求失败,将填充command.people
//包括参数,如。。。
//联系人[0]。姓名=Jeff
//人[0]。镇class='圣路易斯'
//人物[1]。姓名class='Matt'
//人[1]。镇上的“圣何塞”
// ...
}
}
类MyCommand{
列出人
}
阶级人士{
字符串名
弦镇
}

与编写自己的参数解析代码相比,这有很多好处。

最初的问题并不表示这是关于Grails中的参数绑定,但问题后面的注释确实如此。因为这就是您正在做的事情,所以无需自己编写任何参数解析代码即可完成

// grails-app/controllers/demo/DemoController.groovy
package demo

class DemoController {

    def index(MyCommand command) {

        // command.people will be populated if the request
        // includes parameters like...
        //    people[0].name=Jeff
        //    people[0].town='St. Louis'
        //    people[1].name='Matt'
        //    people[1].town='San Jose'

        // ...
    }
}

class MyCommand {
    List<People> people
}

class People {
    String name
    String town
}
//grails-app/controllers/demo/DemoController.groovy
软件包演示
类控制器{
def索引(MyCommand命令){
//如果请求失败,将填充command.people
//包括参数,如。。。
//联系人[0]。姓名=Jeff
//人[0]。镇class='圣路易斯'
//人物[1]。姓名class='Matt'
//人[1]。镇上的“圣何塞”
// ...
}
}
类MyCommand{
列出人
}
阶级人士{
字符串名
弦镇
}

与编写自己的参数解析代码相比,这有很多好处。

示例代码可能与我在Grails用户指南中编写的代码类似。如果您正在处理的映射是Grails应用程序中的请求参数映射,那么您有许多选项。是这样吗?@JeffScottBrown是的,我从Grails的文档中得到了这个。我有一个正在生成的对象表,我尝试在控制器的操作中使用List theListName将它们作为参数接收,但似乎不起作用。“我尝试在控制器的操作中使用List theListName将它们作为参数接收,但似乎不起作用。”—请参阅下面的“数据绑定和操作参数”小节。这描述了控制器操作参数的特殊绑定所支持的17种类型,列表不是其中之一。特殊绑定所支持的17种类型是8种原语、它们的8种类型包装对应物和
java.lang.String
。示例代码看起来像是我在Grails用户指南中编写的。如果您正在处理的映射是Grails应用程序中的请求参数映射,那么您有许多选项。是这样吗?@JeffScottBrown是的,我从Grails的文档中得到了这个。我有一个正在生成的对象表,我尝试在控制器的操作中使用List theListName将它们作为参数接收,但似乎不起作用。“我尝试在控制器的操作中使用List theListName将它们作为参数接收,但似乎不起作用。”—请参阅下面的“数据绑定和操作参数”小节。这描述了控制器操作参数的特殊绑定所支持的17种类型,列表不是其中之一。特殊绑定支持的17种类型是8个原语、它们的8种类型包装对应物和
java.lang.String
。请注意,根据您所做的操作,您可能可以完全跳过命令对象。这个问题没有包括足够的细节,关于你正在努力完成什么,以确定这是否与这里相关。通常,这是在创建或更新域对象的上下文中完成的,对于那些域对象,这可以变得更加简单。请注意,根据您正在执行的操作,您可能可以完全跳过命令对象。这个问题没有包括足够的细节,关于你正在努力完成什么,以确定这是否与这里相关。通常,这是在创建或更新域对象的上下文中完成的,对于那些域对象,这可以变得更加简单。