java list分批_java list分批次处理工具类

package com.test;

import java.util.ArrayList;

import java.util.List;

public class ListSplit {

/**

* 1> 按照份数---划分list

* @param source

* @param num    想要划分成多少份

* @return

*/

public static  List> splitListForNum(List source,int num){

List> result=new ArrayList>();

int remaider=source.size()%num;  //(先计算出余数)

int number=source.size()/num;  //然后是商

int offset=0;//偏移量

for(int i=0;i

List value=null;

if(remaider>0){

value=source.subList(i*number+offset, (i+1)*number+offset+1);

remaider--;

offset++;

}else{

value=source.subList(i*number+offset, (i+1)*number+offset);

}

result.add(value);

}

return result;

}

/**

* 2> 根据目标容量 划分List

* @param source

* @param capacity 划分完成的单个List容量

* @param 

* @return

*/

public static  List> splitListBycapacity(List source,int capacity){

List> result=new ArrayList>();

if (source != null){

int size = source.size();

if (size > 0 ){

for (int i = 0; i 

List value = null;

int end = i+capacity;

if (end > size){

end = size;

}

value = source.subList(i,end);

i = end;

result.add(value);

}

}else {

result = null;

}

}else {

result = null;

}

return result;

}

public static void main(String[] args) {

List all = new ArrayList<>();

int a= 1000;

for (int i = 0; i 

all.add(i+1);

}

List> split = splitListBycapacity(all,333);

System.out.println(split.size());

for (List strings : split) {

System.out.println(strings.size());

}

}

}

### Java 批量处理 List 的方法和示例 #### 使用 `Lists.partition` 进行分批处理 当面对较大的列表时,可以利用 Guava 库中的 `Lists.partition` 方法来实现片操作。此方法能够有效地将一个大型列表多个较小的子列表,从而便于管理和处理。 ```java import com.google.common.collect.Lists; import java.util.ArrayList; import java.util.List; public class BatchProcessingExample { public static void main(String[] args) { List<Integer> list = new ArrayList<>(); for (int i = 0; i < 500; i++) { list.add(i); } // 将列表按每组150个元素划 List<List<Integer>> newList = Lists.partition(list, 150)[^1]; // 遍历并打印每个子集大小 for (List<Integer> subset : newList) { System.out.println(subset.size()); } } } ``` #### 利用同步化集合进行安全并发写入 为了支持多线程环境下的批量任务处理,可以通过创建一个同步化的列表实例来确保线程安全性。这有助于防止因并发访问而导致的数据不一致问题。 ```java import java.util.Collections; import java.util.ArrayList; import java.util.List; public class ThreadSafeBatchProcessing { private final List<String> outputList = Collections.synchronizedList(new ArrayList<>()); public void processItems(List<String> inputList) { for (String item : inputList) { synchronized (outputList) { outputList.add(item); } } } } ``` #### 实现自定义批量处理器 对于更复杂的业务场景,可能需要构建专门用于执行特定类型批量作业的服务类或工具函数。下面是一个简单的例子,展示了如何通过截断原列表来进行段插入数据库的操作: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class CustomBatchService { @Autowired private ExtMapper extMapper; public void batchInsertRecords(List<RecordEntity> records) { if (!records.isEmpty()) { int batchSize = 100; int fullBatchesCount = records.size() / batchSize; // 处理完整的批次 for (int index = 0; index < fullBatchesCount; ++index) { List<RecordEntity> currentBatch = records.subList(index * batchSize, (index + 1) * batchSize); extMapper.insert(currentBatch); } // 插入最后一批次(如果存在) int remainingElementsStartIndex = fullBatchesCount * batchSize; if (remainingElementsStartIndex < records.size()) { extMapper.insert(records.subList(remainingElementsStartIndex, records.size())); } } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值