У меня есть коллекция документов: List listDocs. Документ имеет структуру вида:
id, уровень, aoguid, parentguid, формальное имя, 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 вы можете делать JAVA запросов, таких как SQL. Я написал этот код:
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....");
});
Но этот код не компилируется. Как это исправить, чтобы все работало?