我对java很新,并尝试从ArrayList<ArrayList<Integer>>
创建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
。
96 * 300
中我需要ArrayLists
个不同的Arraylist
。
答案 0 :(得分:1)
它们是空的,因为您在添加后立即清除列表 - 将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);
}
答案 1 :(得分:1)
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());
}
这应该可以帮到你。上述评论中提供的解释。
答案 2 :(得分:0)
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
。