POJO的ArrayList仅包含添加的最后一项。

时间:2017-09-26 14:35:37

标签: java spring list arraylist

我想回到POJO的一个arraylist。当我调试时,我看到pojo的arraylist是4,我可以看到条目,但它只返回最后一个条目并打印四次。不知道我错在哪里。

预期: 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;      

    }

5 个答案:

答案 0 :(得分:4)

看来你应该在实际循环中实例化一个新的E. 否则,您使用相同的对象并更改值。 基本上,您要添加对列表中对象的引用。 所以现在代码的方式是,你要添加4次相同的对象。

E e = new E();放在您添加到列表的同一循环中。

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

答案 1 :(得分:2)

在这里创建你的E实例

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

答案 2 :(得分:2)

您需要在每次迭代时创建E的实例,但是您只创建了一个E实例。

答案 3 :(得分:1)

这里的问题是,您只能在方法开头创建类E的实例,并且每次仍在使用相同的对象时。
您应该为每次迭代创建对象e

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

答案 4 :(得分:1)

您为同一个对象添加了4个引用:e 取E e = new E();进入循环:

for(page=0;page<totalPages;page++){
 E e = new E();
...