我正在使用当前工作方法处理速度问题,该方法在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} ........]“
答案 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()
}
始终保留地图,然后访问速度就足够快。