簡體   English   中英

如何分割ArrayList <E> 進入ArrayList <ArrayList<E> &gt;?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM