我有两个相同大小的列表:
在列表“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的第一个位置上。
欢迎任何线索。
答案 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);
}