我想回到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;
}
答案 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();
...