首页 > 解决方案 > JUNG 库可以根据预定义的属性制作边吗?

问题描述

我有一些数据,比如说 Person 类型。这个人有一个电话号码属性,还有一个主叫和被叫电话号码属性。

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能做到吗?或者我是否需要另一种类型的库,如果是的话,有人可以提供我可以使用的吗?

标签: javagraphjung

解决方案


这是我要做的:

将每个人的电话号码(键)的 java.util.Map 映射到 Person(值)的实例。那是您的反向号码查找。通过使用 PhoneNr 作为键和 Person 实例作为值迭代您的人员集合来填充您的反向号码查找映射。

接下来,我将创建一个边缘类“PhoneCall”,其中包含“通话时间”和“通话持续时间”等信息(或多或少的信息,取决于您可用的信息)。

要将边添加到您的图表中,请遍历您的 Person 实例集合,并为每个 Person 遍历呼叫号码的集合。对于每个主叫号码,使用反向号码查找图来获取主叫人并制作有向边以将主叫人连接到当前人。对每个 Person 的被叫号码集合执行类似的操作。您的图节点将是 Person 实例,而您的边将是 PhoneCall 实例,将一个人连接到另一个人。一定要在你的 Person 类和 PhoneCall 类中添加一个 equals 和 hashCode 方法,这样它们才能正常工作(并且会检测到重复项并希望忽略它们)。

希望这可以帮助!


推荐阅读