我有一个对象列表。每个对象都有一个列表。我想要做的是将这些对象水平添加到一个新列表,使它看起来像这样:
目前我正在努力使用正确的算法,所以我写了这个小测试程序:
public class testClass {
/**
* @param args
*/
public static void main(String[] args) {
List<Double> list1 = new ArrayList<Double>();
List<Double> list2 = new ArrayList<Double>();
List<Double> list3 = new ArrayList<Double>();
List<List<Double>> objectList = new ArrayList<List<Double>>();
//add data
list1.add(1.0);
list1.add(2.0);
list1.add(3.0);
list1.add(4.0);
list1.add(5.0);
list1.add(6.0);
list1.add(7.0);
list2.add(1.0);
list2.add(2.0);
list2.add(3.0);
list2.add(4.0);
list2.add(5.0);
list2.add(6.0);
list2.add(7.0);
list3.add(1.0);
list3.add(2.0);
list3.add(3.0);
list3.add(4.0);
list3.add(5.0);
list3.add(6.0);
list3.add(7.0);
objectList.add(list1);
objectList.add(list2);
objectList.add(list3);
double result = 0.0;
List<Double> resultList = new ArrayList<Double>();
for (int i = 0; i < objectList.size(); i++) {
for (int j = 0; j < objectList.get(i).size(); j++) {
result =+ objectList.get(i).get(j);
resultList.add(result);
}
}
System.out.println(resultList.toString());
}
}
然而,我目前得到的是:
[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0]
有关如何解决这个问题以获得图片所需输出的任何建议吗?
感谢您的回答!
更新
更改为+=
运营商:
[1.0, 3.0, 6.0, 10.0, 15.0, 21.0, 28.0, 29.0, 31.0, 34.0, 38.0, 43.0, 49.0, 56.0, 57.0, 59.0, 62.0, 66.0, 71.0, 77.0, 84.0]
列表大小增加了两倍。如何水平添加元素?
答案 0 :(得分:1)
你犯了一个很小的错误。没有像=+
这样的运营商。而是+=
。
result += objectList.get(i).get(j);
result =+ objectList.get(i).get(j);
将做的是将+
的肯定(objectList.get(i).get(j)
)分配给结果。
此外,您还没有向resultList
添加任何内容,这就是为什么它会打印一个空列表。在打印之前,您需要将一些数据添加到此列表中。
编辑:要水平添加它们,您根本不需要双for
循环。单个for循环应该可以。
for (int j = 0; j < list1.size(); j++) { // assuming all lists are of same size
result = list1.get(j) + list2.get(j) + list3.get(j);
resultList.add(result);
}
Edit2:由于您有很多列表(其中38,000个),您可以尝试这种方法。您需要在每个内部for
循环完成后添加结果集(添加一行元素),而不是在每次添加后添加(添加每个元素),然后将值重置为0.0
。这也解释了为什么没有。 resultList
中的元素数量增加了三倍。
double result = 0.0;
List<Double> resultList = new ArrayList<Double>();
for (int j = 0; j < objectList.get(0).size(); j++) { // assuming all lists are of same size
for (int i = 0; i < objectList.size(); i++) {
result += objectList.get(i).get(j);
}
resultList.add(result);
result = 0.0;
}