首页 > 代码库 > 解决因为链表过长,sql查询慢的问题

解决因为链表过长,sql查询慢的问题

/**
 * 解决因为链表过长,sql查询慢的问题
 * 使用分治算法,先切分链表,然后查询结果,最后合并结果
 *
 * @author lingpy
 * @since 1.0
 */
public class DivideAndConquerUtil {
    /**
     *
     * @param dataList 元数据
     * @param exceuter 执行类
     * @return
     * @throws Exception
     */
    public static <R extends Map, E> R query(List<E> dataList,Executer<R,E> exceuter)throws Exception{
        return query(dataList,exceuter,100);
        
    }
    
    /**
     *
     * @param dataList
     * @param exceuter
     * @param subArrayLength 切分的粒度
     * @return
     * @throws Exception
     */
    @SuppressWarnings("unchecked")
    public static <R extends Map, E> R query(List<E> dataList,Executer<R,E> exceuter,int subArrayLength)throws Exception{
        if(dataList == null || dataList.size() <= subArrayLength){
            return exceuter.execute(dataList);
        }
        R result = null;
        int start = 0, end = start;
        while(start < dataList.size()){
            end = start + subArrayLength;
            if(end  > dataList.size()){
                end = dataList.size();
            }
            R r = exceuter.execute(dataList.subList(start, end));
            if(result == null){
                result = r;
            }else{
                result.putAll(r);
            }
            start = end;
        }
        return result;
    }
    
    public interface Executer<R,E>{
        R execute(List<E> dataList) throws Exception;
    }
}

解决因为链表过长,sql查询慢的问题