水平添加多个列表

时间:2014-02-05 11:36:10

标签: java algorithm list loops

我有一个对象列表。每个对象都有一个列表。我想要做的是将这些对象水平添加到一个新列表,使它看起来像这样:

enter image description here

目前我正在努力使用正确的算法,所以我写了这个小测试程序:

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]

列表大小增加了两倍。如何水平添加元素?

1 个答案:

答案 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;
}