我有对象T的列表,它具有父属性,其中顶级对象的父属性为null。我想将所有对象放入TreeSet(或TreeMap)中。顶级对象将是所有没有父级的根对象(父级为null),并且它们的下级将是其子级。
像这样
o
/ | \
Ra Rb Rc -- Level Root Objects
/ | \ | \
Ca1 Ca2 Cb1 Cc1 Cc2 -- Level of First Children
/ \
Ca11 Ca12.............. -- Level of Second Children
所以我可以得到Ra并找到它的子代(Ca1,Ca2,Ca11,Ca12…。)
更新:很抱歉,可能不清楚,节点指向父节点,如果parent为null,则它们是根节点。问题是父母需要了解孩子。但是这种关系是相反的。
class Node
{
private Node parent;
private String name;
}
这是我想出的解决方案
SortedSet<Node> nodeSet = new TreeSet<Node>(new Comparator<Node>() {
public int compare(Node node1, Node node2) {
if (node1.getParent() == null) {
if (node2.getParent() == null) {
return node1.getId().compareTo(node2.getId());
}
return -1;
}
if (node2.getParent() == null) return 1;
int parentCompare = node1.getParent().getId()
.compareTo(node2.getParent().getId());
if (parentCompare == 0)
return node1.getId().compareTo(node2.getId());
return parentCompare;
}
});
nodeSet.addAll(allData); // allData is the Node list
Map<Node, List<Node>> map = new HashMap<Node, List<Node>>();
for(Node node : nodeSet)
{
if(map.get(node)==null)
{
map.put(node, new ArrayList<Node>());
}
map.get(node).add(node);
Node parentNode = node.getParent();
while(parentNode!=null)
{
map.get(parentNode).add(node);
parentNode = parentNode.getParent();
}
}
// At this point I can get an element from map and see all children in values.
这个问题似乎相当复杂,所以我在这里发布这个问题,寻找任何可能的解决方法。 我有地图清单。我想要一个地图列表,但要确保地图被转换成某种层次结构。 原始数据:(列表 此地图列表将转换为以下地图列表:(列表) 作为一个简单的解决方案,我试图手动处理它们(真的很无聊),所以我在寻找使用流或任何其他可能的方式来处理它们的任何高效、干净的方法。 更新朴素的解决方案如下
问题内容: 我有一个带有字段的“页面”对象列表。此父字段引用列表中的另一个对象。我想基于此字段从此列表创建树层次结构。 这是我原始列表的样子: 我想将其转换为这样的树结构: 我希望可以在任何时候针对任意列表调用的可重用函数。有人知道解决这个问题的好方法吗?任何帮助或建议,将不胜感激! 问题答案: 小提琴
问题内容: 我有一个下面的层次结构,我想将其转换为平面。 我已经写了一种方法并使用了它。但是最终结果中缺少一些要素。我做错什么了? 还有比我以前将列表转换为平面列表更好的方法吗? 我添加了一个示例代码和类似于我在场景中必须使用的对象的内容。最终结果应为1、2、3、4、5、6、7 问题答案: 如果a 有子项,则可以正确地将子项添加到拼合列表中,但是会错过其本身。只需将成员的添加移动到块添加之外,就可
我有一个带有< code>parent字段的“page”对象列表。该父字段引用了列表中的另一个对象。我想从基于此字段的列表中创建一个树层次结构。 以下是我的原始列表: 我想把它转换成这样的树形结构: 我希望有一个可重用的函数,我可以随时对任意列表调用它。有谁知道处理这个问题的好方法吗?任何帮助或建议将不胜感激!
我有一个双链表,我想从它创建一个索引树,以提高随机访问性能。链表中的节点没有唯一标识,可以是派生节点对象的任何实例,该对象具有next和previous引用。为了提高对节点的随机访问性能(即对列表的特定索引的访问),我想在列表的顶部添加一个索引树。例如,用户可能希望检索列表的第三个节点,然后检索第五个节点。我想知道对这个问题是否已经提出了任何解决办法。 我脑海中的一个解决方案是使用一种特殊类型的二
问题内容: 我有一个像这样的清单: 但是更大了,所以我需要一种有效的方法来使它变成像这样的树: 我不能使用诸如嵌套集之类的东西,也不能使用诸如becoas之类的东西,因为我可以在数据库中添加左右值。有任何想法吗? 问题答案: 哦,这就是我解决的方法: