2017-09-26 81 views
-4

我正在嘗試返回POJO的數組列表。當我調試時,我看到pojo的arraylist是4,我可以看到條目,但它只返回最後一個條目並打印它四次。不知道我錯在哪裏。POJO的ArrayList只包含最後添加的項目。

預期: AID - 123 AID - 234 AID - 456 AID - 678

實際

AID - 678 AID - 678 AID - 678 AID - 678 修訂<初始化E內循環解決了問題

@Override 
     public List<E> findAllByLoginId(String loginId) { 
      String oracleUrl = oracleProperties.getUrl(); 
      List<E> el = new ArrayList<>(); 

      int page =0;    
      int totalPages = 1; 
      URL url; 
      try { 
       for(page=0;page<totalPages;page++){ 
        url = new URL(oracleUrl+loginId+"/page/" + page"); 
        ObjectMapper mapper = new ObjectMapper(); 
        UContent value = mapper.readValue(url, UContent.class); 
        List<UEntitiy> entities = value.getContent(); 
        totalPages = value.getTotalPages(); 
        total = value.getTotalElemenets(); 
        if (entities!=null){ 
         String query = null;   
          for(UEntitiy item : entities){ 
           item = droolsHelper.createQueryWithDrools(item); // Drools     
           if(!StringUtils.isEmpty(item.getCQuery()) && item.getCQuery()!=null){ 
            result = runNeo4j(item.getCQuery());// execute in neo4j 
            if(result.list().size() == 0){ 
E e = new E();         
             e.setCId(cId); 
             e.setR(r); 
             e.setU(uId);         
             el.add(e); 
            }      
          }    
         }      
        } 
       } 
       } 
       catch (MalformedURLException e) { 
        e.printStackTrace(); 
       } catch (JsonParseException e) { 
        e.printStackTrace(); 
       } catch (JsonMappingException e) { 
        e.printStackTrace(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
       return el;  

    } 
+0

我的猜測是你不是每次創建對象的新實例,只是一遍又一遍地改變一個實例的屬性。 – csmckelvey

+0

@WebDev你能給我們提供一個由你的oracle URL產生的JSON樣本嗎? –

回答

2

您需要創建每次迭代E的實例的實例,但所創建E.

1

這裏的問題在於,在方法開始時您只創建一次E類的實例,並且每次您仍然使用同一個對象。
你應該創建對象e每次迭代:

if(result.list().size() == 0){  
    e = new E();        
    e.setCId(cId); 
    e.setR(r); 
    e.setU(uId);         
    el.add(e); 
}      
4

看來你應該實際的循環中實例化一個全新E。 否則,您正在使用相同的對象並更改值。 實質上,您正在將列表中的對象的引用添加到列表中。 所以現在的代碼的方式,你添加4次相同的對象。

將置於與添加到列表中相同的循環中。

if(result.list().size() == 0){  e = new E();         
            e.setCId(cId); 
            e.setR(r); 
            e.setU(uId);         
            el.add(e); 
           }  
2

創建您的電子這裏

if(result.list().size() == 0){ 
    E e = new E(); 
    e.setCId(cId); 
    e.setR(r); 
    e.setU(uId); 
    el.add(e); 
} 
+0

由於E e已經被聲明,這將與上面第一個導致錯誤的聲明發生衝突。他們需要刪除頂部的'E e',或者你需要'e = new E();'。 –

+1

我認爲是沒有必要確切它 –

1

只有一個實例你加入4個引用到同一個對象:e 以E e = new E();進入循環:

for(page=0;page<totalPages;page++){ 
E e = new E(); 
... 
相關問題