我有一个数组列表。我想将其分解为固定大小的子列表。例如 -
如果我的列表大小是100.我想在一个列表中有30个元素。所以基本上我想创建4个子列表。什么是实现这个的最优化的方法...我看了互联网,但大多数建议导致将阵列列表分成不存在固定大小的存在。任何线索。指针高度赞赏。最好的,我希望有一个服务/方法来完成这项工作
答案 0 :(得分:2)
如果允许您使用第三方库,Guava会将此作为单一方法Lists.partition提供,这是一个恒定的时间视图。
答案 1 :(得分:1)
public static <T> List<List<T>> split( List<T> alist, int len ){
List<List<T>> listOfLists = new ArrayList<>();
int hi = 0;
for( int lo = 0; lo < alist.size(); lo = hi ){
hi = lo + len;
if( hi > alist.size() ) hi = alist.size();
listOfLists.add( new ArrayList<T>( alist.subList( lo, hi ) ) );
}
return listOfLists;
}
答案 2 :(得分:0)
List<E> subList(int fromIndex, int toIndex);
生成子列表。<T> T[] toArray(T[] a);
Arrays.asList
将为您提供由该数组支持的固定大小的列表。答案 3 :(得分:0)
我喜欢@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
}