List<Long> idList = new ArrayList<>();//用于保存团队用户ID
     idList.add(user.getId());
for(User newUser : allUser){
for(Long invUser : idList){
if(invUser.equals(newUser.getInviter())){
idList.add(newUser.getId());//添加进团队
break;
}
}
}获取团队成员的时候,数据量大的时候,很慢,请问大神们,有什么好的办法优化

解决方案 »

  1.   


    利用这个方法取出二个集合中需要比较的字段,形成二个set
           public static Set<String> putSet(List<Map<String, Object>> list, String field) {
    Set<String> set = new HashSet<String>();
    for (Map<String, Object> map : list) {
    set.add(MapUtil.getStringValue(map, field));
    }
    return set;
    }       /**
     *<p>@description: 求交集</p>
     */
    public static Set<String> intersectionSet(Set<String> setA,Set<String> setB){
    Set<String> setACopy = new HashSet<String>();
    setACopy.addAll(setA);
    setACopy.retainAll(setB);
    return setACopy;
    }
    利用上述intersectionSet方法求出二个set之间的交集就可以得到团队成员的id了        这种方法只需要遍历数组一次,是不会有效率问题的
      

  2.   

    如果用的jdk8 建议你使用stream()去做集合的这种操作 会快很多
      

  3.   

    你这个是双重循环遍历查找,要提高效率的话,在第二个for里使用二分查询(预先排序),会快不少。