簡體   English   中英

合並 arrylists 並在 arraylist 中保存為 arraylist

[英]Merge arrylists and save as arraylist with in arraylist

我有 3 個數組列表,我想將這些數組列表合並到一個數組列表中,例如,將所有數組列表的第一個對象合並到一個數組列表中,並將該數組列表作為新數組列表的第一個對象,將所有數組列表的第二個對象合並到一個數組列表中,然后將其放入arraylist 作為新 Arraylist 的第二個對象,所以我需要輸出是否有可能做到這一點

這是一個例子,list1、list2和list3是你已經擁有的三個列表

ArrayList<ArrayList> oneBigList = new ArrayList<ArrayList>();
ArrayList[] groups = new ArrayList[list1.size()];

for(int i = 0; i < groups.length(); i++)
{
    groups[i] = new ArrayList();
    groups[i].add(list1.get(i);
    groups[i].add(list2.get(i);
    groups[i].add(list3.get(i);

    oneBigList.add(groups[i]);
}

現在 oneBigList 將是一個數組數組; 每個數組包含來自前 3 個 ArrayLists 的給定索引 (i) 的 3 個元素

這是假設ArrayList的大小不同的一種方法。

您有三個 ArrayList,例如:

List<Integer> arr1 = Arrays.asList(1,2,3,4);
List<Integer> arr2 = Arrays.asList(5,6,7);
List<Integer> arr3 = Arrays.asList(1,2,3,4,5);

首先,您需要找到具有更多值的那個,因為帶有結果的ArrayList將具有該長度:

int maxLength = Math.max(arr1.size(), Math.max(arr2.size(), arr3.size()));
List<List<Integer>> finalArrayList = new ArrayList<List<Integer>>(maxLength);

然后,在一個迭代for塊中的所有名單,獲得指標的值依次並將其添加到最終ArrayList使用時間ArrayList和檢查,如果該指數是規模內ArrayList

for(int i = 0; i < maxLength; i++) {
     List<Integer> temp = new ArrayList<Integer>();

     if(i < arr1.size()) {
         temp.add(arr1.get(i));
     }
     if(i < arr2.size()) {
         temp.add(arr2.get(i));
     }
     if(i < arr3.size()) {
         temp.add(arr3.get(i));
     }

     finalArrayList.add(temp);
 }

之后, finalArrayList將具有:

[[1, 5, 1], [2, 6, 2], [3, 7, 3], [4, 4], [5]]

你所要求的基本上是一個轉置函數。

這是一個使用Iterator的示例,它可以處理任意數量的列表,並且每個列表的大小可以不同。

List<List<Integer>> input = Arrays.asList(Arrays.asList(1,2,3,4),
                                          Arrays.asList(5,6,7),
                                          Arrays.asList(8,9,10,11,12));

Iterator<Integer>[] iters = new Iterator[input.size()];
int i = 0;
for (List<Integer> list : input)
    iters[i++] = list.iterator();

List<List<Integer>> output = new ArrayList<>();
while (true) {
    List<Integer> sublist = new ArrayList<>(iters.length);
    for (Iterator<Integer> iter : iters)
        if (iter.hasNext())
            sublist.add(iter.next());
    if (sublist.isEmpty())
        break;
    output.add(sublist);
}

System.out.println("Input:  " + input);
System.out.println("Output: " + output);

輸出

Input:  [[1, 2, 3, 4], [5, 6, 7], [8, 9, 10, 11, 12]]
Output: [[1, 5, 8], [2, 6, 9], [3, 7, 10], [4, 11], [12]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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