java - 在java中将列表划分为固定数量的列表
问题描述
我试图找出一种将列表划分为固定数量列表的有效方法
示例 1
输入 - [1,2,3,4,5,6,7,8]
列表数量 - 4
输出 - [1,2]、[3,4]、[5,6]、[7,8]
示例 2
输入 - [1,2,3,4,5,6,7,8,9,10]
列表数量 - 4
输出 - [1,2,3],[4,5,6],[7,8],[9,10]
不一定要固定元素的顺序
我尝试了几个例子,但大多数都是基于将元素分成块而不是固定数字列表
我确实有这个解决方案,但如果有更好的方法,尤其是在 java 8 中,我很感兴趣
List<Integer> intList = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
int listIteration=0;
int numberOfSublist = 4;
Map<Integer,List<Integer>> intmap = new HashMap<>();
for (int mapIteration = 1; mapIteration < numberOfSublist +1; mapIteration++) {
intmap.put(mapIteration, new ArrayList<Integer>());
}
while(listIteration<intList.size()) {
for (int mapIteration = 1; mapIteration < numberOfSublist +1; mapIteration++) {
if(listIteration==intList.size()) {
break;
}
intmap.get(mapIteration).add(intList.get(listIteration++));
}
}
解决方案
编辑:请参考下面的这个解决方案进行 N 次分区,
爪哇 8
class SamplePartition
{
public static void main (String[] args) throws java.lang.Exception {
List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
final int N=4;
System.out.println(part(l,N));
}
private static <T> List<List<T>> Part(List<T> objs, final int N) {
return new ArrayList<>(IntStream.range(0, objs.size()).boxed().collect(
Collectors.groupingBy(e->e%N,Collectors.mapping(e->objs.get(e), Collectors.toList())
)).values());
}
}
使用番石榴
`List<List<Integer>> partitionedLists = Lists.partition(intList, partition`);
List<List<Integer>> partitionedLists = ListUtils.partition(largeList, partition);
推荐阅读
- maven - 如何创建自己的 Maven 存储库?
- alteryx - 如何使用alteryx检查2个不同的excel文件中哪些列值发生了变化
- vue.js - Multi Auth Guard VueJS Vue-Route Vuex
- bash - 将 8 位整数写入文件
- java - Kafka消费组,创建消费组时设置offset为0
- vba - VBA .Find 和 .Union 方法
- javascript - 如何在构造函数中定义 this
- c - 一个元素的 eBPF 映射。映射类型和内核/用户空间通信
- php - PHP pthreads 异步优化
- gcc - 使用相同编译器标志的不同 Makefile 是否会生成不同的二进制文件