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) );
	}