Java 将数组列表划分为固定大小的子列表
我有一个数组列表,我想把它分解成固定大小的子列表-Java 将数组列表划分为固定大小的子列表,java,arraylist,logic,Java,Arraylist,Logic,我有一个数组列表,我想把它分解成固定大小的子列表- 如果我的列表大小是100。我想在一个列表中包含30个元素。因此,基本上我想创建4个子列表。实现这一点的最优化方法是什么…我在互联网上查看过,但大多数建议导致将数组列表拆分为没有固定大小的子列表。任何潜在客户。非常感谢指点。最好是,我希望有一个服务/方法来完成这项工作如果允许您使用第三方库,Guava将其作为单一方法提供,这是一个固定时间视图。如果允许您使用第三方库,Guava将其作为单一方法提供,这是一个固定时间视图。 您可以使用列表子列表(i
如果我的列表大小是100。我想在一个列表中包含30个元素。因此,基本上我想创建4个子列表。实现这一点的最优化方法是什么…我在互联网上查看过,但大多数建议导致将数组列表拆分为没有固定大小的子列表。任何潜在客户。非常感谢指点。最好是,我希望有一个服务/方法来完成这项工作如果允许您使用第三方库,Guava将其作为单一方法提供,这是一个固定时间视图。如果允许您使用第三方库,Guava将其作为单一方法提供,这是一个固定时间视图。
- 您可以使用
列表子列表(int-fromIndex,int-toIndex)代码>生成子列表。
- 然后您可以使用
T[]toArray(T[]a)将每个子列表转换为一个数组代码>
- 最后,
将为您提供一个由该数组支持的固定大小的列表Arrays.asList
- 您可以使用
列表子列表(int-fromIndex,int-toIndex)代码>生成子列表。
- 然后您可以使用
T[]toArray(T[]a)将每个子列表转换为一个数组代码>
- 最后,
将为您提供一个由该数组支持的固定大小的列表Arrays.asList
公共静态列表拆分(列表列表列表,整数列){
List listOfLists=新建ArrayList();
inthi=0;
对于(int-lo=0;loalist.size())hi=alist.size();
添加(新的数组列表(列表子列表(lo,hi));
}
返回列表;
}
公共静态列表拆分(列表列表列表,整数列){
List listOfLists=新建ArrayList();
inthi=0;
对于(int-lo=0;loalist.size())hi=alist.size();
添加(新的数组列表(列表子列表(lo,hi));
}
返回列表;
}
我喜欢@laune给出的答案,但如果您使用Java 8,也可以使用这种函数式方法来避免外部循环
public static <T> List<List<T>> splitJava8(List<T> alist, final int len) {
return IntStream.range(0, alist.size()) // Iterate over the whole thing
.filter(i -> i % len == 0) // Filter out every 'len' number
.boxed() // Create a stream (instead of IntStream)
.map(i -> alist.subList(i, Math.min(i + len, alist.size()))) // create sublists
.collect(Collectors.toList()); // Collect the whole thing to a list of lists
}
publicstaticlist-splitJava8(列表列表,最终整数){
return IntStream.range(0,alist.size())//迭代整个过程
.filter(i->i%len==0)//过滤掉每个“len”数字
.boxed()//创建流(而不是IntStream)
.map(i->alist.subList(i,Math.min(i+len,alist.size()))//创建子列表
.collect(Collectors.toList());//将整个内容收集到列表中
}
我喜欢@laune给出的答案,但如果您使用Java 8,也可以使用这种函数式方法来避免外部循环
public static <T> List<List<T>> splitJava8(List<T> alist, final int len) {
return IntStream.range(0, alist.size()) // Iterate over the whole thing
.filter(i -> i % len == 0) // Filter out every 'len' number
.boxed() // Create a stream (instead of IntStream)
.map(i -> alist.subList(i, Math.min(i + len, alist.size()))) // create sublists
.collect(Collectors.toList()); // Collect the whole thing to a list of lists
}
publicstaticlist-splitJava8(列表列表,最终整数){
return IntStream.range(0,alist.size())//迭代整个过程
.filter(i->i%len==0)//过滤掉每个“len”数字
.boxed()//创建流(而不是IntStream)
.map(i->alist.subList(i,Math.min(i+len,alist.size()))//创建子列表
.collect(Collectors.toList());//将整个内容收集到列表中
}
@laune OP需要固定大小的子列表。Arrays.asList生成这样的列表。要使用Arrays.asList,您需要一个数组。集合中的构造函数是通过数组进行的,所以这是没有意义的-我不希望编写已经编写的内容。即使没有,你也可以称之为trimToSize。(这并不是真的固定的,对吧?@laune在你的代码中,你构建的ArrayList的大小不是固定的。另一方面,如果您使用Arrays.asList,您将得到一个真正固定的列表(它不返回java.util.ArrayList,而是返回具有固定长度的java.util.Arrays.ArrayList。不支持添加和删除)@laune OP想要固定大小的子列表。Arrays.asList生成这样的列表。要使用Arrays.asList,您需要一个数组。集合中的构造函数是通过数组进行的,所以这是没有意义的-我不希望编写已经编写的内容。即使没有,你也可以称之为trimToSize。(这并不是真的固定的,对吧?@laune在你的代码中,你构建的ArrayList的大小不是固定的。另一方面,如果使用Arrays.asList,则会得到一个真正固定的列表(它不返回java.util.ArrayList,而是返回具有固定长度的java.util.Arrays.ArrayList。不支持添加和删除)