使用 BSON 和 Java 构建树结构
building a treestructure with BSON and Java
给出的字符串列表如下:
A
A.1
A.1.B
A.1.B.X
A.1.B.X
A.1.B.X
A.1.B.X
A.1.C
A.1.C.Y
A.1.C.Y
A.1.C.Y
如何将字符串的第一部分作为 parent 键来构建树结构?
我有一个限制是它需要在 BSON 中,因为它必须进入 MongoDB 并且我不允许使用额外的自定义 objects 并且我还有一些额外的数据要保存。
BSON 文档必须类似于:
{id:A, parentId:null, children:[{id:A.1,parentId:A, children:[{id:A.1.B, parentId:A.1, children[...]}, ...]},...]}
编辑:
回答:
为了解决这个问题,我采用了 bij Zavior 给出的答案来构建我的基本元素。
Map<String, Map<String, Object>> map = new HashMap<>()
在那之后,我拿到了我的地图列表并通过它们进行了解析。我查看了条目是否有 parentId,如果有,我将其添加到 parent 的 children 列表中。我使用 Map 来存储 id 和元素。
map.entrySet().stream().forEach(entry -> {
Map<String, Object> treeObject = entry.getValue();
String parentId = (String)treeObject.get("parent");
if (StringUtils.isNotBlank(parentId)) {
Map<String, Object> parent = map.get(parentId);
((List<Map<String, Object>>)parent.get("children")).add(treeObject);
}
});
当我构建树时,我找到了 parents。
List<Map<String, Object>> result = map.values().stream().filter(entry -> StringUtils.isBlank((String) entry.get("parent"))).collect(Collectors.toList());
MongoDB 的 BasicDBObject 有一个接受映射的构造函数。我只会使用普通的 java HashMap<String, Object>
来构建结构并将其传递给构造函数。
像这样:
map.put("id", "A");
map.put("parent", null);
map.put("children", listOfChildren);
请注意,在您的示例中,您有一个子列表,因此您将创建一个地图列表并将其作为列表传递。
childMap.put("id", "A1");
childMap.put("parent", "A");
childMap.put("children", <another list of maps>);
listOfChildren.add(childMap):
给出的字符串列表如下:
A
A.1
A.1.B
A.1.B.X
A.1.B.X
A.1.B.X
A.1.B.X
A.1.C
A.1.C.Y
A.1.C.Y
A.1.C.Y
如何将字符串的第一部分作为 parent 键来构建树结构? 我有一个限制是它需要在 BSON 中,因为它必须进入 MongoDB 并且我不允许使用额外的自定义 objects 并且我还有一些额外的数据要保存。 BSON 文档必须类似于:
{id:A, parentId:null, children:[{id:A.1,parentId:A, children:[{id:A.1.B, parentId:A.1, children[...]}, ...]},...]}
编辑: 回答: 为了解决这个问题,我采用了 bij Zavior 给出的答案来构建我的基本元素。
Map<String, Map<String, Object>> map = new HashMap<>()
在那之后,我拿到了我的地图列表并通过它们进行了解析。我查看了条目是否有 parentId,如果有,我将其添加到 parent 的 children 列表中。我使用 Map 来存储 id 和元素。
map.entrySet().stream().forEach(entry -> {
Map<String, Object> treeObject = entry.getValue();
String parentId = (String)treeObject.get("parent");
if (StringUtils.isNotBlank(parentId)) {
Map<String, Object> parent = map.get(parentId);
((List<Map<String, Object>>)parent.get("children")).add(treeObject);
}
});
当我构建树时,我找到了 parents。
List<Map<String, Object>> result = map.values().stream().filter(entry -> StringUtils.isBlank((String) entry.get("parent"))).collect(Collectors.toList());
MongoDB 的 BasicDBObject 有一个接受映射的构造函数。我只会使用普通的 java HashMap<String, Object>
来构建结构并将其传递给构造函数。
像这样:
map.put("id", "A");
map.put("parent", null);
map.put("children", listOfChildren);
请注意,在您的示例中,您有一个子列表,因此您将创建一个地图列表并将其作为列表传递。
childMap.put("id", "A1");
childMap.put("parent", "A");
childMap.put("children", <another list of maps>);
listOfChildren.add(childMap):