【发布时间】:2015-06-01 09:38:30
【问题描述】:
我有一堆父/子对,我想尽可能将它们变成分层树结构。例如,这些可能是配对:
Child : Parent
H : Ga
F : G
G : D
E : D
A : E
B : C
C : E
D : NULL
Z : Y
Y : X
X: NULL
需要转化为(a)层次树:
D
├── E
│ ├── A
│ │ └── B
│ └── C
└── G
| ├── F
| └── H
|
X
|
└── Y
|
└──Z
在 Java 中,我如何从包含 child=>parent 对的 arrayList 转到类似的 Tree?
我需要这个操作的输出是arrayList包含两个元素D和X 反过来,每个人都有其孩子的列表,而孩子的列表又包含一个孩子的列表,依此类推
public class MegaMenuDTO {
private String Id;
private String name;
private String parentId;
private List<MegaMenuDTO> childrenItems=new ArrayList<MegaMenuDTO>();
public String getId() {
return Id;
}
public void setId(String id) {
Id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getParentId() {
return parentId;
}
public void setParentId(String parentId) {
this.parentId = parentId;
}
public List<MegaMenuDTO> getChildrenItems() {
return childrenItems;
}
public void setChildrenItems(List<MegaMenuDTO> childrenItems) {
this.childrenItems = childrenItems;
}
}
我的第一次尝试是
private void arrangeMegaMenuTree(MegaMenuDTO grandParent,
MegaMenuDTO parent, List<MegaMenuDTO> children) {
for (MegaMenuDTO child : children) {
if (child.getParentId().equals(parent.getId())) {
arrangeMegaMenuTree(parent, child, children);
}
}
if (!grandParent.getId().equals(parent.getId())) {
grandParent.getChildrenItems().add(parent);
// children.remove(parent);
}
}
再试一次
private List<MegaMenuDTO> arrangeMegaMenuTree(MegaMenuDTOparent,List<MegaMenuDTO>menuItems) {
for (MegaMenuDTO child : menuItems) {
if (parent.getId().equals(child.getId())) {
continue;
}
if (hasChildren(child, menuItems)) {
parent.setChildrenItems(arrangeMegaMenuTree(child, menuItems
.subList(menuItems.indexOf(child), menuItems.size())));
} else {
List<MegaMenuDTO> tempList = new ArrayList<MegaMenuDTO>();
tempList.add(child);
return tempList;
}
}
return null;
}
private boolean hasChildren(MegaMenuDTO parent, List<MegaMenuDTO> children) {
for (MegaMenuDTO child : children) {
if (child.getParentId().equals(parent.getId())) {
return true;
}
}
return false;
}
【问题讨论】:
-
请问您的第一次代码尝试是什么?你打算如何在 java 中表示树?span>
-
通过树我的意思是元素有一个元素列表,其中每个元素都包含元素的点亮等等
-
很抱歉打扰你,但请不要把你所有的getter和setter都告诉你,越精确越好。
-
解决方案stackoverflow.com/a/30570416/813853 似乎是合法的!
标签: java