0

我正在使用当前工作方法解决速度问题,该方法在ArrayList. 根据大小,在列表中查找值可能需要超过 7 秒的时间。

我需要加快这个过程,这样我才能处理更多的数据。任何帮助将不胜感激。这是我的例子;

方法:

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

crmM映射内容

“[{ATTRIBUTE=AcademicIndex, INTEGRATION_TAG=Contact~nAcademic_Index}, {ATTRIBUTE=AcademicInterest, INTEGRATION_TAG=Contact~mplAcademic_Interest},........]”

4

2 回答 2

1

findAll 循环每条记录,然后 collect 循环每条记录,然后 unique 再次循环每条记录。

尝试...

Set result = [] as Set

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

return (result as ArrayList)

这只会循环一次,因为它是唯一的,因为它被添加到集合中

于 2013-04-26T20:05:32.777 回答
0

执行以下操作一次

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

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

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

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

于 2013-04-26T18:45:05.393 回答