如何在 groovy/grails 中获取列表中的一个元素的值

How to get the value of one element in a List in groovy/grails

执行 createCriteria 查询后,我有一个对象列表,其中只有 1 个项目,里面有 7 个字符串。我想做的是只得到这七种元素中的一种??

List<Object> result - com.test.MyService.getConfig(String, String, String, String, String, String, String)

这是我在列表中得到的元素:

[name:John, surname:John city:Rome, car:BMW, country:Italy, day:Monday, color:Red,]

例如,我只想访问字符串 'country' 以在方法中 return 它:

我正在尝试这样做:

result.get(4)

我遇到了这个错误:

java.lang.IndexOutOfBoundsException: Index: 4, Size: 1

尝试

def oneObject = YourDomainClass.createCriteria().get{
     //add your criteria if any
}
return oneObject.country

您得到 java.lang.IndexOutOfBoundsException: Index: 4, Size: 1,因为当您执行 YourDomainClass.createCriteria().list{} 时,您会得到 YourDomainClass 对象(只有一个对象)的 list。所以如果你想使用 YourDomainClass.createCriteria().list{} 你应该执行:

def objects = YourDomainClass.createCriteria().list{}
if(objects) //check if any object is in list
    return objects[0].country

您可以做的是:

  1. 要么只做 result.first().country
  2. 或者,如果您确定条件总是 return 单个结果,则使用 get 而不是 list
  3. 如果您只需要一个 属性,则使用投影仅获取 属性 而不是整个对象。

def result = DomainClass.createCriteria().list { //or get resultTransformer(CriteriaSpecification.ALIAS_TO_ENTITY_MAP) projections { property("country", "country") } }

在这种情况下,当使用 .list{} 获取国家/地区的值时:

  1. 带有结果转换器return result.first().country
  2. 没有结果转换器:return result.first()

当使用 .get{} 而不是 .list{} 时:

  1. 带有结果转换器return result.country
  2. 没有结果转换器:return result