无法在Java中为...循环访问对象

时间:2019-02-25 23:17:19

标签: java for-loop

我无法将此查询添加到我的列表中:

// 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++;
    }

这是我的向量列表aRad:

I need all values not null

...但是我的对象列表以第一个值中断并完成。怎么了?

2 个答案:

答案 0 :(得分:0)

您需要使用嵌套循环来遍历所有行,然后遍历每一行中的所有列。试试这个:

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);
}

答案 1 :(得分:0)

看看这是否适合您。首先,您可以将所有元素放在一个对象数组列表中的一个级别。之后,您可以遍历该列表并检查空元素。

// 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()));