【问题标题】:ArrayList of POJO contains only the last item added. [duplicate]POJO 的 ArrayList 仅包含添加的最后一项。 [复制]
【发布时间】:2017-09-26 14:35:36
【问题描述】:

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

预期: 援助 - 123 援助 - 234 援助 - 456 援助 - 678

实际

aId - 678 援助 - 678 援助 - 678 援助 - 678 更新

 @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;      

    }

【问题讨论】:

  • 我猜你不是每次都创建一个新的对象实例,而是一遍又一遍地改变一个实例的属性。
  • @WebDev 你能给我们一个你的 oracle URL 生成的 JSON 样本吗?

标签: java spring list arraylist


【解决方案1】:

看来您应该在实际循环中实例化一个新的 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); 
                               }     

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      在此处创建您的 E 实例

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

      【讨论】:

      • 由于 E e 已经声明,这将与上面的第一个声明冲突导致错误。他们需要删除顶部的E e,或者你需要e = new E();
      • 我认为没有必要精确
      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-07-07
          • 2021-11-24
          相关资源
          最近更新 更多