2017-09-26 78 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(); 
... 
相关问题