Arhn - архитектура программирования

построение древовидной структуры с помощью BSON и Java

Учитывая список String, например:

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

Как я могу создать древовидную структуру с первой частью строк в качестве родительских ключей? Ограничение, которое у меня есть, заключается в том, что он должен быть в BSON, потому что он должен войти в MongoDB, и мне не разрешено использовать дополнительные пользовательские объекты, и у меня также есть некоторые дополнительные данные для сохранения. Документы 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, и если да, я добавил ее в список дочерних элементов этого родителя. Я использовал карту для хранения идентификаторов и элементов.

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);
        }
    });

Когда я построил дерево, я нашел родителей.

List<Map<String, Object>> result = map.values().stream().filter(entry -> StringUtils.isBlank((String) entry.get("parent"))).collect(Collectors.toList());
27.11.2015

Ответы:


1

BasicDBObject MongoDB имеет конструктор, который принимает карту. Я бы просто использовал обычную 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):
27.11.2015
  • И как бы я получил древовидную структуру с этим? Или BasicDBObject делает это за меня? 27.11.2015
  • @bobK По сути, вы просто вкладываете коллекции. Смотрите мое последнее редактирование 27.11.2015
  • И именно здесь я застреваю, вычисляя детей на правильном уровне. Хотя хэш-карта - хороший совет :) 27.11.2015
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..