Может ли библиотека JUNG создавать ребра на основе предопределенных свойств? - PullRequest
0 голосов
/ 29 мая 2019

У меня есть некоторые данные, скажем, типа Персона. У этого лица есть свойство номера телефона, а также свойства вызывающего и вызываемого номера телефона.

class Person {
   String id;
   String displayName;
   String phoneNr;
   String callingNr; // or List<String> callingNrs;
   String calledNr;  // or List<String> calledNrs;
}

Что я хочу, так это поместить несколько объектов Person в экземпляр Graph и затем отобразить отношения в представлении. В идеале компоненты, нарисованные в представлении, являются интерактивными, то есть вы можете щелкнуть узел / вершину, которые подсвечивают края (и, возможно, больше).

Я пробовал JUNG, но в документации я вижу некоторые примеры, которые я должен, вроде как сам определять отношения между объектами Person, как показано ниже:

Graph.addEdge("edge-name", personA.phoneNr, personB.phoneNr);

Я новичок в JUNG, но, возможно, есть способ рассказать JUNG о свойствах Person и о том, что JUNG знает, как их соединить?

Возможно ли это с JUNG? Или мне нужна библиотека другого типа, если да, то может ли кто-нибудь предоставить мне такую ​​библиотеку, которую я могу использовать?

1 Ответ

1 голос
/ 30 мая 2019

Вот что я бы сделал:

Создайте java.util.Map из номера телефона каждого человека (ключ) к экземпляру Person (значение). Это ваш обратный поиск номера. Заполните карту поиска обратного номера, выполнив итерацию по вашей коллекции людей, используя PhoneNr в качестве ключа и экземпляр Person в качестве значения.

Далее, я бы создал пограничный класс «PhoneCall», который содержит такую ​​информацию, как «время звонка» и «продолжительность звонка» (более или менее информация, в зависимости от того, что у вас есть).

Чтобы добавить ребра в свой график, выполните итерацию по своей коллекции экземпляров Person, а для каждого человека - итерацию по коллекции вызывающих номеров. Для каждого вызывающего номера используйте карту поиска обратного номера, чтобы получить вызывающего абонента, и направьте ребро, чтобы подключить вызывающего абонента к текущему. Сделайте что-то подобное для коллекции вызываемых номеров каждого человека. Узлы вашего графа будут экземплярами Person, а ваши ребра будут экземплярами PhoneCall, которые соединяют одного Person с другим. Обязательно добавьте метод equals и hashCode в ваш класс Person и в ваш класс PhoneCall, чтобы они работали правильно (и дубликаты будут обнаружены и, будем надеяться, игнорироваться).

Надеюсь, это поможет!

...