Grails:ArrayList - 检索速度

时间:2013-04-26 16:06:15

标签: grails arraylist findall collect

我正在使用当前工作方法处理速度问题,该方法在ArrayList内找到特定的属性集合。根据大小,在列表中查找值可能需要7秒以上的时间。

我需要加快这个过程,因此我可以处理更大量的数据。任何帮助将不胜感激。这是我的例子;

方法:

public ArrayList getIntegrationTag(String attribute) {
  return crmMapping?.findAll { it.get("ATTRIBUTE") == attribute }?.collect{
    it.INTEGRATION_TAG 
  }?.unique()
}//end getIntegrationTag(String attribute)

crmMapping内容

  

“[{ATTRIBUTE = AcademicIndex,INTEGRATION_TAG = Contact~nAcademic_Index},   {ATTRIBUTE = AcademicInterest,   INTEGRATION_TAG =联系〜msplAcademic_Interest} ........]“

2 个答案:

答案 0 :(得分:1)

findAll循环遍历每条记录,然后collect循环遍历每条记录,然后再次对每条记录进行唯一循环。

...试

Set result = [] as Set

for(element in crmMapping) {
  if(element.get("ATTRIBUTE") == attribute) {
    result << element.INTEGRATION_TAG
  }
}

return (result as ArrayList)

一旦它被添加到Set

中它将是唯一的,它将只循环

答案 1 :(得分:0)

执行以下操作

def crmMappingMap = crmMapping.groupBy({ it.ATTRIBUTE })

然后你有一个所有相同属性实例的地图,可以使用crmMappingMap[attribute].INTEGRATION_TAG访问它,它将返回所需的数组,如下所示:

public ArrayList getIntegrationTag(String attribute) {
    crmMappingMap[attribute].INTEGRATION_TAG.unique()
}

始终保留地图,然后访问速度就足够快。