我是靠谱客的博主 飘逸画板,最近开发中收集的这篇文章主要介绍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());

});

});

最后

以上就是飘逸画板为你收集整理的java 循环调用_Java for循环执行了两次的全部内容,希望文章能够帮你解决java 循环调用_Java for循环执行了两次所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部