[英]How to split an ArrayList<E> into ArrayList<ArrayList<E>>?
我是Java的新手,嘗試從ArrayList<Integer>
創建ArrayList<ArrayList<Integer>>
(將28800個數據點分成300個)。
public static ArrayList<ArrayList<Integer>> createListOfArrays(ArrayList<Integer> list) {
ArrayList<ArrayList<Integer>> listOfArrays = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> temp = new ArrayList<Integer>();
for (int i = 0; i < list.size(); i++) {
int arrayInt = list.get(i);
temp.add(arrayInt);
if (temp.size() % 300 == 0) {
listOfArrays.add(temp);
temp.clear();
}
}
return listOfArrays;
System.out.println(listOfArrays.size());
System.out.println(listOfArrays.get(0).size());
}
我的打印語句為我提供了96個ArrayLists
的正確大小,但是它們都是空的。 如果我刪除temp.clear()
它們全部由28800 Integers
組成。
我在一個Arraylist
需要96 * 300
不同的ArrayLists
。
它們是空的,因為您在添加列表后立即清除了列表-將temp
添加到listOfArrays
不會復制它。 您只是多次將相同列表添加到listOfArrays
中。
您可以使用List.subList
從列表中提取300個元素的塊來輕松完成此操作:
for (int i = 0; i < list.size(); i += 300) {
// Extract a view of this block of (up to) 300 elements.
List<E> subList = list.subList(i, Math.min(i+300, list.size()));
// Copy it into a new list since we require an ArrayList to add
// to `listOfArrays`.
ArrayList<E> copy = new ArrayList<>(subList);
// Put it into the result.
listOfArrays.add(copy);
}
public static ArrayList<ArrayList<Integer>> createListOfArrays(ArrayList<Integer> list) {
ArrayList<ArrayList<Integer>> listOfArrays = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> temp = new ArrayList<Integer>();
for (int i = 0; i < list.size(); i++) {
int arrayInt = list.get(i);
temp.add(arrayInt);
if (i % 300 == 0) {
listOfArrays.add(temp);
//assigning new ArrayList object in temp
temp = new ArrayList<Integer>();
}
}
//adding last batch of temp to listOfArrays
if(temp.size()>0){
listOfArrays.add(temp);
}
return listOfArrays;
System.out.println(listOfArrays.size());
System.out.println(listOfArrays.get(0).size());
}
這應該為您解決問題。 上面的評論中提供了解釋。
for (int i = 0; i < list.size(); i++) {
Integer arrayInt = list.get(i);
temp.add(arrayInt);
if (temp.size() % 300 == 0) {
listOfArrays.add(temp);
temp = new ArrayList<>();
}
}
從列表中檢索元素時,請勿使用基本
int
。 因為它將不必要地導致unboxing
,然后再次autoboxing
。而不是依靠
list.size() % 300 == 0
,您還應該更改邏輯。
您甚至可以使用arraylist
方法subList
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.