JAvaコードは1つの配列を複数の等長の配列に分ける
2350 ワード
まず、これは、一度に要求されたデータ量が、返されたデータ量が大きすぎてメモリがオーバーフローしないように、バッチで取得するためです.
@SuppressWarnings("unused")
public static List getList(int targ,List mList) {
List idsStrList = new ArrayList();
List>mEndList=new ArrayList<>();
// System.out.println(mList.toString());
if( mList.size()%targ!=0) {
for (int j = 0; j < mList.size() / targ + 1; j++) {
if ((j * targ + targ) < mList.size()) {
mEndList.add(mList.subList(j * targ, j * targ + targ));//0-3,4-7,8-11 j=0,j+3=3 j=j*3+1
} else if ((j * targ + targ) > mList.size()) {
mEndList.add(mList.subList(j * targ, mList.size()));
} else if (mList.size() < targ) {
mEndList.add(mList.subList(0, mList.size()));
}
}
}else if(mList.size()%targ==0){
for (int j = 0; j < mList.size() / targ; j++) {
if ((j * targ + targ) <= mList.size()) {
mEndList.add(mList.subList(j * targ, j * targ + targ));//0-3,4-7,8-11 j=0,j+3=3 j=j*3+1
} else if ((j * targ+ targ) > mList.size()) {
mEndList.add(mList.subList(j * targ, mList.size()));
} else if (mList.size() < targ) {
mEndList.add(mList.subList(0, mList.size()));
}
}
}
// for (int i = 0; i < mEndList.size(); i++) {
// log.info(mEndList.get(i).toString()+"");
// }
for (List list : mEndList) {
String idsStr = "";
for (String string : list) {
idsStr = idsStr + string + ",";
}
idsStrList.add(idsStr);
}
return idsStrList;
}
public static void main(String[] args) {
List strList = new ArrayList();
for (int i = 0; i < 1000000; i++) {
strList.add("ids"+i);
}
long startTime = System.currentTimeMillis();
System.out.println(startTime);
List list = getList(20,strList);
long endTime = System.currentTimeMillis();
System.out.println(" 20 :"+list.get(0));
System.out.println(" :"+(endTime - startTime) );
}