2014-02-05 3 views
1

У меня есть список объектов. У каждого объекта есть список. То, что я хочу сделать, это добавить эти объекты по горизонтали в новый список, так что это выглядит следующим образом:Добавление нескольких списков по горизонтали

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]

Любой выздоровеет о том, как исправить это, чтобы получить желаемый результат из изображения?

Я ценю ваш ответ!

UPDATE

Изменение к += оператора Я получаю:

[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

'= +' или '+ =' ??? –

+0

@SubhrajyotiMajumder Что значит? – user2051347

+0

код, который вы упоминали '= +', но в вопросе вы упомянули '+ =' –

ответ

1

Вы совершили очень незначительную ошибку. Нет такого оператора, как =+. Вместо этого это +=.

result += objectList.get(i).get(j); 

Что result =+ objectList.get(i).get(j); будет делать это присвоить положительный (+) от objectList.get(i).get(j) к результату.

А также вы ничего не добавили к resultList, и именно поэтому он печатает пустой список. Перед печатью необходимо добавить некоторые данные в этот список.

Редактировать: Чтобы добавить их по горизонтали, вам не нужна двойная петля 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; 
} 
+0

Thx для вашего ответа! Однако я до сих пор не получаю желаемых результатов. Посмотрите мое обновление! – user2051347

+0

Thx для вашего ответа! В принципе, я бы так же реализовал это. Однако у меня есть программа, у меня есть больше, чем 38000 списков, и это вообще невозможно ... – user2051347

+0

Wont result = list1.get (j) + list2.get (j) + list3.get (j); добавить сумму из 3 значений в 1 место списка?Вместо того, чтобы добавлять значение к каждому пятну горизонтально? – pedromss

Смежные вопросы