要求:共1000条数据,第一次批量插入100条,第二次批量插入101到200条,依次插入数据;
实现方式这里选择了两种常用的方式,都是使用List操作;
第一种实现思路如下:
<1> 原先存放数据的List为recordList,求出共需批量处理的次数;
<2> 新建一个List为list,循环后,将recordList的前maxValue条数据放到list里;
<3> 调用批量处理方法,调用recordList的removeAll方法将list中的数据从recordList中清除;
<4> 调用list.clear方法清除掉list本身的数据;
/** * 批量插入 例如:共1000条数据,第一次批量插入100条,第二次批量插入101到200条,依次插入数据; * * @param recordList * @param maxValue 批量处理的条数,如1000条 * @return */ private void batchAddRecords(List<String> recordList, int maxValue) { List<String> list = new ArrayList<String>(); int size = recordList.size(); int total = size / maxValue; if (size % maxValue != 0) { total += 1; } for (int i = 0; i < total; i++) { if (i == total - 1) { maxValue = size - (i * maxValue); } for (int j = 0; j < maxValue; j++) { list.add(recordList.get(j)); } // 批量处理的方法 print(list); recordList.removeAll(list); list.clear(); } }
第二种实现思路类似:
通过调用recordList的subList方法,将截取后的内容保存到list中,然后调用批量处理方法,最后调用list的clear方法将list和recordList中的这部分数据清除;
需注意的是:List的subList方法有点特殊,它操作的是list和原先list所引用的同一块内存,所以需要注意些。
private void batchAddRecords2(List<String> recordList, int maxValue) { List<String> list = new ArrayList<String>(); int size = recordList.size(); int total = size / maxValue; if (size % maxValue != 0) { total += 1; } for (int i = 0; i < total; i++) { if (i == total - 1) { maxValue = size - (i * maxValue); } list = recordList.subList(0, maxValue); // 批量处理的方法 print(list); list.clear(); } }