-1

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

在列表“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

我一直在使用循环,但不知道该怎么做,因为当我进行第二次 for 迭代列表“b”时,它将整个列表 b 添加到列表 a 的第一个位置,依此类推。

任何线索都将受到欢迎。

4

4 回答 4

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;
}
于 2013-06-05T18:18:08.583 回答
1

addAll将元素附加到ArrayList. 在您的情况下,这只是串联。

这个例子有点难以处理,因为数组是固定长度的。您最好使用列表列表,或者在这种情况下使用 a Mapof s。List如果您停留在当前格式中,则需要使用新的数组列表。

于 2013-06-05T18:18:44.083 回答
0

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

于 2013-06-05T18:17:37.093 回答
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);
}
于 2013-06-05T18:18:55.580 回答