日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java for loop_Java for循环执行了两次

發(fā)布時間:2024/10/8 java 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java for loop_Java for循环执行了两次 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

我在執(zhí)行for循環(huán)時遇到了一些麻煩.循環(huán)被調用兩次.以下是完成工作的代碼:

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,因此我收到兩次“呼叫計數(shù)134”的輸出.這導致列表中出現(xiàn)重復.

以下是POJO:

JSON響應,其中調用foor循環(huán)的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;

}

有人可以解釋為什么這個循環(huán)被調用兩次導致每個子項在列表中兩次?

更新

執(zhí)行此代碼時,我沒有重復項:

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());

});

});

最佳答案 問題出在JsonResponse對象上,它始終是相同的. JsonResponse列表中的對象被修改兩次,因此存在重復項.這就是為什么(@Joakim Danielson)有第二個參數(shù)newItem.

另外,我不得不更改TreeBuilder的buildTree方法的簽名,以接受由映射器返回的Items列表.

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的java for loop_Java for循环执行了两次的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。