В естественном мире человек может быть частью отношений, но отношения не могут быть частью человека. Поэтому нежелание Relationship
в качестве члена Person
. Такая установка предотвращает Person
от необходимости более одного Relationship
:), а также предотвращает Person
от отсутствия Relationship
:(
Если мы можем определить Relationship
как между 2-х человек, и только 2 человека, то один можно настроить будет состоять в том, чтобы класс Relationship
содержал 2 Person
членов. Если Relationship
может быть между 3 и более людьми :), то может оказаться более полезным один член List<Person>
.
Я хочу, чтобы иметь возможность назначить объект отношения между объектами два Person
Если вы пытаетесь дискретно спросить совета знакомств, вы пришли в неправильное место.
Edit:
Если вы пытаетесь получить Relationship
, что любые данные двух людей, которые участвуют в, создать метод, как этот
public Relationship find(List<Relationship> relationships, Person person1, Person person2) {
for (Relationship relationship : relationships) {
if (relationship.getPerson1().equals(person1) && relationship.getPerson2().equals(person2) {
return relationship;
}
if (relationship.getPerson1().equals(person2) && relationship.getPerson2().equals(person1) {
return relationship;
}
}
}
Если производительность является проблемой, используйте Set<Relationship>
и переопределить equals()
и hashCode()
методов отношений, так что два объекта Relationship
объектов, содержащих этих же людей, будут считаться равными. Тогда вы можете это сделать
Set<Relationship> relationships = new HashSet<Relationship>();
// populate relationships
Relationship delegate = new Relationship(person1, person2);
int hasRelationship = relationships.contains(delegate);
Вы могли бы каждый человек содержит список всех отношений, это в случае, если вы хотите хранить их снаружи, вы можете использовать вложенную карту (или таблицы Гуавы). –
Если я правильно понимаю, вы хотите иметь возможность, учитывая двух лиц, узнать, существует ли между ними связь. Создайте класс Key, содержащий два человека или два идентификатора человека, и используйте Map. Убедитесь, что вы правильно используете hashCode() и equals(). –
Если вы открыты для использования сторонних библиотек, то я ** ВЫСОКО ** рекомендую Neo4j. Он отображает этот тип материала с использованием графиков, и вы можете использовать его язык запросов для эффективного разбора по структуре. –