Улучшение доступа к объекту - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть объект, который я пытаюсь сохранить в структуре данных быстрого доступа. Доступ к объекту основан на значениях его полей / свойств, например иерархии уровней. Вы не можете получить доступ к уровню 2, если у вас нет уровня 1. Объект выглядит следующим образом:

public class Project {

private String group;

private String category;

private String name;

private String option1;

private String option2;

private String option3;

private String value1;

private String value2;

private String information1;

private String information2;

private String information3;

Идея состоит в том, что я хочу получить доступ ко всему объекту на основе значений свойств: группа, категория, имя, опция1, опция2, опция3. Сначала вы проверяете группу, после того, как вы проверяете категорию, затем вы проверяете имя и т. Д. c.

group ---> category ---> name ---> option1 ---> option2 --- > option3 ---> Весь объект

Я предложил два решения:

  1. Сохраните его внутри иерархии карт.
  2. Сохраните его внутри древовидная структура.

1.Каждое поле интереса класса будет ключом внутри карты.

Map<String, Map<String, Map<String, Map<String, Map<String, Map<String, Project>>>>>> projectsTable = new HashMap<>();

2.Сделайте древовидную структуру данных, которая будет иметь потомки следующее свойство объекта.

public class Tree<T> {
    private T data;
    private Tree<T> parent;
    private List<Tree<T>> children;
}

Сохранить дерево внутри карты, значение которого представляет собой список объектов.

private static Map<TreeNode<String>, List<Project>> projects = new HashMap<>();

Мои проблемы:

  1. Я не знаю, правильные ли это подходы для такого рода проблем.
  2. Я хотел бы знать, есть ли более элегантное решение там. Первый из них выглядит как головная боль, а второй заканчивается кучей циклов for, пока вы не доберетесь до последнего свойства.
  3. В ближайшем будущем может быть более 3 вариантов. Таким образом, количество свойств, которые нужно проверить перед доступом ко всему объекту, увеличится на go.

Спасибо!

...