У меня есть объект, который я пытаюсь сохранить в структуре данных быстрого доступа. Доступ к объекту основан на значениях его полей / свойств, например иерархии уровней. Вы не можете получить доступ к уровню 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.Каждое поле интереса класса будет ключом внутри карты.
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<>();
Мои проблемы:
- Я не знаю, правильные ли это подходы для такого рода проблем.
- Я хотел бы знать, есть ли более элегантное решение там. Первый из них выглядит как головная боль, а второй заканчивается кучей циклов for, пока вы не доберетесь до последнего свойства.
- В ближайшем будущем может быть более 3 вариантов. Таким образом, количество свойств, которые нужно проверить перед доступом ко всему объекту, увеличится на go.
Спасибо!