简体   繁体   English

无法遍历Java for…loop中的对象

[英]Can't iterate over objects in a Java for…loop

I can't add to my list this query: 我无法将此查询添加到列表中:

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

This is my vector listaRad: 这是我的向量列表

I need all values not null 我需要所有值都不为null

...but my objects list break at first value and finalize. ...但是我的对象列表以第一个值中断并完成。 What's wrong? 怎么了?

You need to use nested loops to iterate over all rows, and then to iterate over all columns within each row. 您需要使用嵌套循环来遍历所有行,然后遍历每一行中的所有列。 Try this: 尝试这个:

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

Ideally you should put each column's value in an object's field rather than looping and converting them to toString() . 理想情况下,您应该将各列的值放在对象的字段中,而不是循环并将其转换为toString() Something like this: 像这样:

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

See if this works for you. 看看这是否适合您。 First you can put all elements at one level in an Object array list. 首先,您可以将所有元素放在一个对象数组列表中的一个级别。 After that you can loop through that list and check for null elements. 之后,您可以遍历该列表并检查空元素。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM