java 循环调用_Java for循环执行了两次

我在执行for循环时遇到了一些麻烦.循环被调用两次.以下是完成工作的代码:

import java.util.ArrayList;

import java.util.List;

public class PoolItemMapper {

public List mapJsonObjectsToItems(JsonResponse jsonResponse) {

int count = 0;

List itemsList = new ArrayList<>();

List js = jsonResponse.getItems();

for (Item item : jsonResponse.getItems()) {

itemsList.add(addNormalItemProperties(item, new Item()));

count++;

}

System.out.println("Call count: " + count);

return itemsList;

}

private Item addNormalItemProperties(Item oldItem, Item newItem) {

if(oldItem.getMembersReference().getItems().size() <= 0) {

return oldItem;

} else if (oldItem.getMembersReference().getItems().size() > 0) {

for (SubItem subItem: oldItem.getMembersReference().getItems()) {

oldItem.getSubItems().add(creteNewSubItem(subItem));

}

}

return oldItem;

}

private Item creteNewSubItem(SubItem oldItem) {

Item i = new Item();

i.setDynamicRatio(oldItem.getDynamicRatio());

i.setEphermal(oldItem.getEphermal());

i.setInheritProfile(oldItem.getInheritProfile());

i.setLogging(oldItem.getLogging());

i.setRateLimit(oldItem.getRateLimit());

i.setRatio(oldItem.getRatio());

i.setSession(oldItem.getSession());

i.setAddress(oldItem.getAddress());

i.setName(oldItem.getName());

i.setState(oldItem.getState());

return i;

}

}

该列表的大小为134,因此我收到两次“呼叫计数134”的输出.这导致列表中出现重复.

以下是POJO:

JSON响应,其中调用foor循环的getItems():

public class JsonResponse {

private String kind;

private String selfLink;

private List items = new ArrayList();

public JsonResponse() {

}

public String getKind() {

return kind;

}

public void setKind(String kind) {

this.kind = kind;

}

public String getSelfLink() {

return selfLink;

}

public void setSelfLink(String selfLink) {

this.selfLink = selfLink;

}

public List getItems() {

return items;

}

public void setItems(List items) {

this.items = items;

}

}

Item类是一个简单的DTO,只包含变量及其getter / setter:

这是调用方法的地方:

itemTree = new PoolTreeBuilderImpl().buildTree(j);

itemTree.stream().forEach(i -> {

System.out.println("[PARENT] " + i.getData().toString());

i.getData().getSubItems().stream().forEach(si -> {

System.out.println(" [CHILD] " + si.toString());

});

});

}

和PoolTreeBuilderImpl调用:

@Override

public List> buildTree(JsonResponse jsonResponse) {

List> itemTree = new ArrayList<>();

List mappedItems = new PoolItemMapper().mapJsonObjectsToItems(jsonResponse);

for (Item i : mappedItems) {

TreeNode item = new TreeNode<>(i);

if (i.getSubItems().size() > 0) {

for (Item subItem : i.getSubItems()) {

item.addChild(subItem);

}

}

itemTree.add(item);

}

return itemTree;

}

有人可以解释为什么这个循环被调用两次导致每个子项在列表中两次?

更新

执行此代码时,我没有重复项:

List mappedItems = new PoolItemMapper().mapJsonObjectsToItems(jsonResponse);

mappedItems.forEach(i -> {

System.out.println("[PARENT] " + i.toString());

i.getMembersReference().getItems().forEach(s -> {

System.out.println(" [CHILD] " + s.toString());

});

});

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值