Не могу перебрать объекты в цикле Java for ... - PullRequest
0 голосов
/ 26 февраля 2019

Я не могу добавить в свой список этот запрос:

// This query always return List<Object[]>
Query buscarRad = AreaPrincipal.em.createNamedQuery("Rad.buscarPorCuil");
buscarRad.setParameter("cuil", cuil);

List<Object[]> listaRad = buscarRad.getResultList();

int i = 0;
for (Object[] filaRad : listaRad) {
//  if (filaRad[i].equals(null)) {
    if (filaRad[i] != null) {
        lvRad.getItems().add(filaRad[i].toString());
    }
    i++;
    }

Это мой вектор listaRad:

Мне нужны все значения, не нули

... но мой список объектов ломается при первом значении и завершается.Что не так?

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Посмотрите, работает ли это для вас.Сначала вы можете поместить все элементы на одном уровне в список массивов объектов.После этого вы можете просмотреть этот список и проверить наличие нулевых элементов.

// This query always return List<Object[]>
Query buscarRad = AreaPrincipal.em.createNamedQuery("Rad.buscarPorCuil");
buscarRad.setParameter("cuil", cuil);

List<Object[]> listaRad = buscarRad.getResultList();
List<Object> finalList = new ArrayList<>();

int i = 0;
for (Object[] filaRad : listaRad) {
  finalList.add(Arrays.asList(filaRad));
}

for(Object o : finalList){
  if (o != null) {
        lvRad.getItems().add(o.toString());
  }
}

In java 8 you can do like this assuming that lvRad.getItems() is a list 
itself

lvRad.getItems().addAll(finalList.stream()
  .filter(Objects::nonNull)
  .collect(Collectors.toList()));
0 голосов
/ 26 февраля 2019

Вам необходимо использовать вложенные циклы для итерации по всем строкам, а затем для итерации по всем столбцам в каждой строке.Попробуйте это:

for (Object[] filaRad : listaRad) { //for DB rows
    for (int i = 0; i < filaRad.length; i++) { //for DB columns within a row
        if (filaRad[i] != null) {
            lvRad.getItems().add(filaRad[i].toString());
        }
    }
}

В идеале вы должны поместить значение каждого столбца в поле объекта, а не зацикливаться и преобразовывать их в toString().Как то так:

List<MyDbRow> rows = new ArrayList<>();
for (Object[] filaRad : listaRad) {
    MyDbRow row = new MyDbRow();
    row.setId(fileRad[0]); //may require casting
    row.setName(fileRad[1]);

    rows.add(row);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...