您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關(guān)JAVA工具如何將一個list均分成n個list,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
分批處理一塊大數(shù)據(jù): 例如,從(Excel ,txt ,數(shù)據(jù)庫 )中一行一行的讀數(shù)據(jù),最終讀了1W+數(shù)據(jù),然后對這1W+數(shù)據(jù)又要進行業(yè)務(wù)處理,一條一條的遍歷太慢了??梢园堰@個大的list拆成n個,然后用n個線程去跑,這樣效率就會快很多。下述代碼就是其中用到關(guān)于的一個工具類: 把一個List均分成n個小的list
入?yún)ⅲ阂粋€大的list
出參:n個小的list
思路:像小學(xué)做除法一樣。 10/3=3余1. 10條數(shù)據(jù),分成3個list,那每個list分3個還多1個,那只有前面的都多分1個,第一個list分3個然后加1個余數(shù)等于4個。第2個list分3個,然后最后一個list分3個。代碼如下,可以直接拷貝運行
/**
* 將一個list均分成n個list
* @param source
* @return
*/
public static <T> List <List<T>> averageAssign(List<T>source,intn){
List <List<T>> result=new ArrayList<List<T>>();
int remainder=source.size()%n; //先計算出余數(shù)
int number=source.size()/n; //然后是商
int offset=0;//偏移量(用以標(biāo)識加的余數(shù))
for(int i=0;i<n;i++){
List<T>value;
if(remainder>0){
value=source.subList(i*number+offset, (i+1)*number+offset+1);
remainder--;
offset++;
}else{
value=source.subList(i*number+offset, (i+1)*number+offset);
}
result.add(value);
}
return result;
}
關(guān)于JAVA工具如何將一個list均分成n個list就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。