我想创建一个具有n
级别层次结构的用户树。我有一个POJO对象,其中有id,parent_id
。
问题是用户可以属于多个组。所以,当我尝试这样做时,
while (iterator.hasNext()) {
val user_pojo_obj = iterator.next()
val key = user_pojo_obj.id
val parent_key = user_pojo_obj.family_id
var child: Item = container.addItem(key)
child.getItemProperty("caption").asInstanceOf[Property[Any]].setValue(user_pojo_obj.name)
child.getItemProperty("POJOobj").asInstanceOf[Property[Any]].setValue(user_pojo_obj)
container.setParent(key, parent_key)
}
我在第二行得到了NullPointerException,据我所知,这是因为容器中的addItem()
重复,返回null
如果不能改进,请给我推荐替代品。(使用Scala)
谢谢。。
据我所知,您不能有多个父级或重复的itemId
s。以下伪代码是构建树状结构的替代解决方案(node
是您的POJO):
counter = 0;
function process(nodes, parent) {
foreach (node in nodes) {
newId = counter++;
item = container.addItem(newId);
// set item caption etc.
if (parent not null)
container.setParent(newId, parent)
process(getNodesWithParent(node), newId);
}
}
process(getNodesWithParent(null), null);
方法getNodesWithParent
需要由您定义。我猜您将使用迭代器,遍历POJO,并返回那些具有family_id
等于参数的id
的POJO。总体性能取决于您对getNodesWithParent
的实现,因此,如果您有一个大的数据集,您应该注意提高效率。