【发布时间】:2020-02-13 08:04:38
【问题描述】:
我有一个文档集合:List listDocs。文档的结构如下:
id、级别、aoguid、parentguid、formalname、currstatus
。此结构允许您创建地址的树形结构。即:国家 - 1 级,城市 - 2 级,街道 - 3 级,依此类推,直至 7 级。某些级别可能是也可能不是。我的任务:形成包含完整地址和组成完整地址的部分数组的 json。
{
"full Address": "Country city street house",
"parts": [
{
"id": 1,
"aoguid": 1,
"parentguid": 0,
"formalname": "country",
"currstatus": 0
},
{
"id": 2,
"aoguid": 2,
"parentguid": 1,
"formalname": "city",
"currstatus": 0
},
{
"id": 3,
"aoguid": 3,
"parentguid": 2,
"formalname": "street",
"currstatus": 0
},
{
"id": 4,
"aoguid": 4,
"parentguid": 3,
"formalname": "house",
"currstatus": 0
}
]
}
由于项目使用的是 mongoDb,而不是关系数据库,因此任务变得复杂。但是我发现使用 JOOL 框架,你可以像 SQL 一样进行 JAVA 查询。我写了这段代码:
Seq<Document> seq1 = Seq.seq(listDocs).filter(
it -> isNull(it.get("currstatus")) || "0".equals(it.get("currstatus"))
);
Seq<Document> seq2 = seq1;
Seq<Document> seq3 = seq1;
Seq<Document> seq4 = seq1;
Seq<Document> seq5 = seq1;
Seq<Document> seq6 = seq1;
Seq<Document> seq7 = seq1;
seq1
.leftOuterJoin(seq2, (l1, l2) -> Objects.equals(l1.get("aoguid"), l2.get("parentguid")))
.leftOuterJoin(seq3, (l2, l3) -> Objects.equals(l2.v2.get("aoguid"), l3.get("parentguid")))
.leftOuterJoin(seq4, (l3, l4) -> Objects.equals(l3.v3.get("aoguid"), l4.get("parentguid")))
.leftOuterJoin(seq5, (l4, l5) -> Objects.equals(l4.v4.get("aoguid"), l5.get("parentguid")))
.leftOuterJoin(seq6, (l5, l6) -> Objects.equals(l5.v5.get("aoguid"), l6.get("parentguid")))
.leftOuterJoin(seq7, (l6, l7) -> Objects.equals(l6.v6.get("aoguid"), l7.get("parentguid")))
.parallel()
.forEach(it -> {
System.out.println("Some actions....");
});
但是这段代码无法编译。我怎样才能修复它以使一切正常?
【问题讨论】:
-
这个结构也不起作用:
seq1.leftOuterJoin(seq2, seq3, seq4, seq5, seq6, seq7, (l1, l2, l3, l4, l5, l6, l7) -> );
标签: java tree java-stream inner-join jool-library