将两个子列表混合到一个列表中

时间:2013-06-05 18:14:26

标签: java list arraylist

我有两个相同大小的列表:

在列表“a”中我有

Position[0] = 1,2,3
Position[1] = 7,8,9
Position[2] = 13,14,15
Position[3] = 19,20,21

在“b”列表中我有

Position[0] = 4,5,6
Position[1] = 10,11,12
Position[2] = 16,17,18
Position[3] = 22,23,24

我要做的是将两个列表混合起来得到这个:

Position[0] = 1,2,3,4,5,6
Position[1] = 7,8,9,10,11,12
Position[2] = 13,14,15,16,17,18
Position[3] = 19,20,21,22,23,24

我试过这个

public List<Object[]> getMixedList() {
 List a, b;
 a = getLista();
 b = getListb();
 List<Object[]> ab = new ArrayList<Object[]>(a);
 ab.addAll(b);
 return ab
}

但我得到的是这个

Position[0] = 1,2,3
Position[1] = 7,8,9
Position[2] = 13,14,15
Position[3] = 19,20,21
Position[4] = 4,5,6
Position[5] = 10,11,12
Position[6] = 16,17,18
Position[7] = 22,23,24

我一直在使用循环,但无法弄清楚如何做到这一点,当我做第二次迭代列表“b”时,它将整个列表b添加到列表a的第一个位置上。

欢迎任何线索。

4 个答案:

答案 0 :(得分:2)

addAll不附加Collections的相应元素,而是将它们附加到Collection的末尾。

您需要遍历第一个集合,创建一个新数组并将两个相应数组的元素复制到新数组中,然后再将其设置为新数组元素。

由于数组的大小是固定的,您可以使用System#arrayCopy创建一个足够大的新数组,以容纳来自相应数组元素的条目。

List<Object[]> getMergedList(List<Object[]> list1, List<Object[]> list2) {
    List<Object[]> mergedList = new ArrayList<Object[]>();

    for (int i = 0; i < list1.size(); i++) {

        Object[] objects1 = list1.get(i);
        Object[] objects2 = list2.get(i);

        int length1 = objects1.length;
        int length2 = objects2.length;
        Object[] mergedArray = new Object[length1 + length2];
        System.arraycopy(objects1, 0, mergedArray, 0, length1);
        System.arraycopy(objects2, 0, mergedArray, length1, length2);

        mergedList.add(mergedArray);
    }

    return mergedList;
}

答案 1 :(得分:1)

addAll将元素追加到ArrayList的末尾。在你的情况下它只是串联。

由于数组是固定长度的,因此该示例有点难以使用。您最好使用列表列表,或者在这种情况下可能Map List。如果您遇到当前格式,则需要使用新的数组列表。

答案 2 :(得分:0)

尝试同时迭代两个循环。我不想给你更多信息,因为这听起来像是一个家庭作业问题。

答案 3 :(得分:0)

for (int i = 0; i < 4 ; ++i) {
   Object[] aContent = a.get(i);
   Object[] bContent = b.get(i);
   ... add your code to merge the content ..
   ab.add(mergedResult);
}