Как сохранить объекты в списке без уникального идентификатора (ownTo, hasMany) - PullRequest
0 голосов
/ 28 сентября 2011

Когда у меня есть коллекция, где каждый объект уникален, но он принадлежит какому-то parentId, как мне его хранить?

Моя идея

  • ArrayList <MyType> objects_list; // для хранения этих объектов
  • ArrayList <int[]> parents_list // для хранения parent_id против int[] object_list.id 's

Так что соединение будет

  • object_list.item belongsTo parents_list.item
  • parents_list.item hasMany object_list.item

Нет ли более эффективного, более Java-решения?


Немного подробнее объясню:

У меня есть коллекция объектов, где каждый объект имеет parent_id в некоторой переменной внутри.
Мне нужно сохранить эти объекты, чтобы я мог легко выбрать все объекты по их parent_id

И я не могу использовать простой ArrayList с parent_id в качестве key, потому что key должен быть уникальным.

Так как их хранить, чтобы получить все объекты по их parent_id, как Collection.getByParentId(parent_id)?

Ответы [ 4 ]

2 голосов
/ 28 сентября 2011

Попробуйте использовать Guava's ListMultimap

ListMultimap<Integer, MyType> map = ArrayListMultimap.<Integer, MyType>create();

Тогда вы можете сделать:

List<MyType> children = map.get(parentId);
2 голосов
/ 28 сентября 2011

Как и Дэйв , как было сказано ранее, сохраните родительский идентификатор в MyType.

// all MyType objects
List<MyType> objects;

// This way you could track the relations
// (you would have to update this on change)
Map<Integer, List<MyType>> relations;
1 голос
/ 28 сентября 2011
HashMap<Integer, ArrayList<MyObject>> myObjects = new HashMap(); // Assuming parent_id is Integer

Вы можете получить к нему доступ так:

ArrayList<MyObject> myObjectsArray = myObjects.get(parent_id);
1 голос
/ 28 сентября 2011

Да; сохраните parent_id в MyType, где он принадлежит, или не храните его где-либо, и используйте идентификатор родительского объекта, когда вам это нужно (неясно, как сформулировано, что вы на самом деле пытаетесь достичь).

...