簡體   English   中英

無法遍歷Java for…loop中的對象

[英]Can't iterate over objects in a 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++;
    }

這是我的向量列表

我需要所有值都不為null

...但是我的對象列表以第一個值中斷並完成。 怎么了?

您需要使用嵌套循環來遍歷所有行,然后遍歷每一行中的所有列。 嘗試這個:

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

看看這是否適合您。 首先,您可以將所有元素放在一個對象數組列表中的一個級別。 之后,您可以遍歷該列表並檢查空元素。

// 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