将Arraylist拆分为多个可变长度的Arraylists

时间:2016-11-18 11:01:49

标签: java arraylist

我有两个ArrayLists。第一个列表包含一些x个元素,这些元素又是ArrayLists。第二个列表仅包含整数值。

第二个列表大小始终小于第一个列表大小第一个列表的示例是:[[TC1,TC1_1],[,TC1_2],[TC2,TC2_1],[TC3,TC3_1] [,TC3_2],[TC4, TC4_1] [,TC4_2] [,TC4_3],[TC5,TC5_1],[TC6,TC6_1]]

第二个列表的示例是[0,2,3,5,8,9]。第二个Araylist元素指向第一个arraylist,其中第一个arraylist的各个ArrayList元素的第一个元素不为空

现在要求是第一个列表应该分成6个列表,其中6个是第二个列表大小。输出应如下所示。

在6个新列表中,第1个列表将包含从0到第1个索引的主列表元素。第二个列表将包含来自第三个索引的主列表元素。第3个列表将包含从第4个到第5个索引的主列表元素,依此类推。最终输出将如下所示

       `[[[TC1,TC1_1],[,TC1_2]]
        [[TC2,TC2_1]]
        [[TC3,TC3_1][,TC3_2]]
        [[TC4,TC4_1][,TC4_2][,TC4_3]]
        [[TC5,TC5_1]]
        [[TC6,TC6_1]]]



private ArrayList getTCsIncludingSubTcs(ArrayList TCIndexes,ArrayList alTCs) {
    //List tempSubList=new ArrayList();
    ArrayList finalTCS=new ArrayList();

    for(int j=0;j<TCIndexes.size();j++){
        int TCIndex=(int)TCIndexes.get(j);
        if(j==0 && TCIndexes.size()==1){

            //List tempSubList=new ArrayList(alTCs.subList(TCIndex,(int)alTCs.size()));
            List tempSubList=getSubArrayList(TCIndex,(int)alTCs.size(),alTCs);

            finalTCS.add(tempSubList);
            break;
        }
        int nextTCIndex=j+1;
        System.out.println(nextTCIndex);
        if(j==TCIndexes.size()-1){
            List tempSubList=getSubArrayList(TCIndex,(int)alTCs.size(),alTCs);
            finalTCS.add(tempSubList);
            break;
        }
        List tempSubList=getSubArrayList(TCIndex,(int)alTCs.size(),alTCs);
        finalTCS.add(tempSubList);

        System.out.println("finalTCS :"+finalTCS);  



    }
    System.out.println("fc size"+finalTCS.size());
            return finalTCS;
}

2 个答案:

答案 0 :(得分:0)

试试这段代码。

公共课测试{

private List<List<String>> getTcsIncludingSubTcs(ArrayList<Integer> tcIndexes,ArrayList<String> alTcs) {

    List<List<String>> finalTcs=new ArrayList<>();
    List<String> temp = new ArrayList<>();

    int size = tcIndexes.size();
    int i= alTcs.size();
    int k = 0;
    for(int j=0; j<alTcs.size(); j++){

        if(( j != 0 && j % size == 0 && i >= size))
        {
            temp = new ArrayList<>();               
            k++;    
        }
        i--;
        temp.add(alTcs.get(j));

        if(finalTcs.contains(temp))
            finalTcs.remove(k);
        finalTcs.add(k, temp);              
    }

            return finalTcs;
}

public static void main (String arg[])
{
    ArrayList<String> data1 = new ArrayList<>();
    data1.add("TC1");
    data1.add("TC2");
    data1.add("TC3");
    data1.add("TC4");
    data1.add("TC5");
    data1.add("TC6");
    data1.add("TC7");
    data1.add("TC8");
    data1.add("TC9");
    data1.add("TC10");

    ArrayList<Integer> data2 = new ArrayList<>();
    data2.add(0);
    data2.add(3);
    data2.add(6);

    Test t = new Test();    
    List<List<String>> list = t.getTcsIncludingSubTcs(data2, data1);
    for(List<String> l : list)
        System.out.println(l);

}   

}

输出:

[TC1, TC2, TC3]
[TC4, TC5, TC6]
[TC7, TC8, TC9, TC10]

答案 1 :(得分:0)

另一种解决方案是, 我们有源列表和起始索引列表。使用这两个列表生成结束索引列表。现在使用起始索引列表和结束索引列表来生成所需的最终输出