Перебрать наблюдаемый список

У меня есть таблица javafx (carTable), содержащая один столбец:

+-------------+
+ Brand        +
+-------------+

Этот столбец является частью наблюдаемого списка (carOL). Этот ОЛ также содержит 2 списка («Даты» и «Цены»). Цены на каждую марку можно скачать из интернета для определенного временного окна.

eg:

Audi
   2014-01-01
   2014-01-02
   55000
   90000
BMW
   2014-01-01
   2014-01-02
   85000
   70000

Теперь я хочу создать линейный график со всеми этими данными, который сравнивает динамику цен между различными брендами.

Что я придумал до сих пор:

@FXML private CategoryAxis xAxis = new CategoryAxis();
@FXML private NumberAxis yAxis = new NumberAxis();
@FXML private LineChart<String, Number> lc = new LineChart<>(xAxis,yAxis);

Series<String, Number> series = new Series<>();
List<String> d = new ArrayList<String>();
List<Double> p = new ArrayList<Double>();
int id = 0;

for (Car c : carOL) {
    d = c.getDate(); // returns array list with dates from OL
    p = c.getPrice(); // returns array list with prices from OL
    series.getData().add(new XYChart.Data<>(d.get(id), p.get(id)));
    id++;
    }

lc.getData().add(series);

Это, конечно, не совсем возвращает то, что я хочу. Мне как-то нужно иметь возможность создавать отдельные «серии» для каждого бренда.

Кто-нибудь может помочь?


person double_o    schedule 12.06.2014    source источник


Ответы (1)


Если порядок элементов в массиве дат соответствует порядку элементов в массиве цен, вам нужно это:

for (Car c : carOL) { 
  d = c.getDate(); // returns array list with dates from OL 
  p = c.getPrice(); // returns array list with prices from OL 
  for (String dates : d.getDate()) { 
    series.getData().add(new XYChart.Data<>(dates, p.get(id))); 
    id++; 
  } 
} 

Просмотрите все даты и добавьте их с соответствующими ценами.

person Aleksandr Podkutin    schedule 12.06.2014
comment
спасибо, но это работает довольно хорошо, так как дата уже отформатирована в виде строки в моем списке наблюдений - person double_o; 13.06.2014
comment
@double_o Хорошо, попробуйте добавить общие типы при инициализации series, new Series<String, Number>(); - person Aleksandr Podkutin; 13.06.2014
comment
@double_o А вы уверены, что carOL не пусто? - person Aleksandr Podkutin; 13.06.2014
comment
Да, я уверен, что carOL не пуст. На самом деле у меня нет проблем с добавлением значений. Моя проблема в том, что я получаю только одну серию, т.е. одна линия на линейной диаграмме вместо одной для каждой марки. - person double_o; 13.06.2014
comment
@double_o Car c содержит такую ​​информацию, как: Audi 2014-01-01 2014-01-02 55000 90000 ? - person Aleksandr Podkutin; 13.06.2014
comment
класс Car содержит наблюдаемый список carOL, который содержит все эти данные. в самих данных нет ничего плохого. Я могу открыть линейный график, увидеть даты по оси x и числа по оси y. На данный момент я вижу только одну строку (цены неверны из-за получения данных от всех брендов), хотя я хочу видеть одну строку для Audi, одну для BMW и т. д. - person double_o; 13.06.2014
comment
Давайте продолжим обсуждение в чате. - person Aleksandr Podkutin; 13.06.2014