一个list分割成若干个list的方法

该博客介绍了如何使用Java实现将一个列表按指定大小进行分组和平均分配。提供了两个方法,一个是将列表按固定长度切分成多个子列表,另一个是将列表均等分配到n个子列表中。这两个方法在处理数据分块或分布式任务时非常实用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 按指定大小,分隔集合,将集合按规定个数分为n个部分
public static List<List<T>> splitList(List<T> list, int len) {  
	if (list == null || list.size() == 0 || len < 1) {  
		return null;  
	}  
  
	List<List<T>> result = new ArrayList<List<T>>();  
  
  
	int size = list.size();  
	int count = (size + len - 1) / len;  
  
  
	for (int i = 0; i < count; i++) {  
		List<T> subList = list.subList(i * len, ((i + 1) * len > size ? size : len * (i + 1)));  
		result.add(subList);  
	}  
	return result;  
}  

2.将一个list均分成n个list


	public static <T> List<List<T>> averageAssign(List<T> list,int n){
		List<List<T>> result=new ArrayList<List<T>>();
		int remaider=list.size()%n;  //(先计算出余数)
		int number=list.size()/n;  //然后是商
		int offset=0;//偏移量
		for(int i=0;i<n;i++){
			List<T> value=null;
			if(remaider>0){
				value=list.subList(i*number+offset, (i+1)*number+offset+1);
				remaider--;
				offset++;
			}else{
				value=list.subList(i*number+offset, (i+1)*number+offset);
			}
			result.add(value);
		}
		return result;
	}
### 实现 List 分割操作的方法 在编程中实现 `List` 分割操作,可以通过多种方式完。以下是几种常见的实现方法,结合了引用内容和专业知识。 #### 方法一:使用 Guava 的 `Lists.partition` Google Guava 提供了一个便捷的工具类 `Lists.partition`,可以直接将一个列表分割若干个固定大小的子列表[^1]。 ```java import com.google.common.collect.Lists; import java.util.ArrayList; import java.util.List; public class ListPartitionExample { public static void main(String[] args) { List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); list.add(6); list.add(7); list.add(8); List<List<Integer>> partitionedLists = Lists.partition(list, 3); partitionedLists.forEach(System.out::println); } } ``` 输出结果如下: ``` [1, 2, 3] [4, 5, 6] [7, 8] ``` #### 方法二:使用 Apache Commons 的 `ListUtils.partition` Apache Commons Collections 提供了类似的工具类 `ListUtils.partition`,也可以轻松实现列表分割功能[^1]。 ```java import org.apache.commons.collections4.ListUtils; import java.util.ArrayList; import java.util.List; public class ListPartitionExample { public static void main(String[] args) { List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); list.add(6); list.add(7); list.add(8); List<List<Integer>> partitionedLists = ListUtils.partition(list, 3); partitionedLists.forEach(System.out::println); } } ``` 输出结果与方法一相同。 #### 方法三:手动实现分割逻辑 如果不希望依赖第三方库,可以手动编写代码来实现分割功能。以下是一个基于循环的实现[^2]。 ```java import java.util.ArrayList; import java.util.List; public class ListPartitionExample { public static void main(String[] args) { List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); list.add(6); list.add(7); list.add(8); int chunkSize = 3; List<List<Integer>> result = new ArrayList<>(); for (int i = 0; i < list.size(); i += chunkSize) { result.add(new ArrayList<>(list.subList(i, Math.min(i + chunkSize, list.size())))); } result.forEach(System.out::println); } } ``` 输出结果同样为: ``` [1, 2, 3] [4, 5, 6] [7, 8] ``` #### 方法四:使用 Java Stream API 可以借助 `Stream API` 和其提供的 `skip` 与 `limit` 方法来实现分割逻辑[^2]。 ```java import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; import java.util.stream.IntStream; import java.util.stream.Stream; public class ListPartitionExample { public static void main(String[] args) { List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); list.add(6); list.add(7); list.add(8); int chunkSize = 3; List<List<Integer>> result = IntStream.range(0, (int) Math.ceil((double) list.size() / chunkSize)) .mapToObj(i -> list.subList(i * chunkSize, Math.min((i + 1) * chunkSize, list.size()))) .collect(Collectors.toList()); result.forEach(System.out::println); } } ``` 此方法通过计算每个块的起始索引和结束索引,动态生子列表。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值