JUNG框架:如何获取多集群中的所有目标Vertex标签
获取集群中所有目标Vertex标签的实现方案
核心需求
获取单个集群及多集群场景下所有目标Vertex的标签,使用径向布局(radial layout),已知getEdgeTargets和getEdgeSource方法,当前代码存在固定循环次数的局限性。
单个集群的实现方式
遍历集群内所有边,通过getEdgeTarget获取目标Vertex后提取标签:
// 单个集群收集所有目标Vertex标签 Set<String> targetVertexLabels = new HashSet<>(); for (Edge edge : cluster.graph.getEdges()) { Vertex targetVertex = cluster.graph.getEdgeTarget(edge); if (targetVertex != null) { targetVertexLabels.add(targetVertex.getNodename()); } }
多集群的实现方式
遍历所有集群集合,对每个集群执行单个集群的标签收集逻辑,最终合并结果:
// 多集群收集所有目标Vertex标签 Set<String> allTargetLabels = new HashSet<>(); // 假设clusters是所有集群的集合 for (Cluster cluster : clusters) { for (Edge edge : cluster.graph.getEdges()) { Vertex targetVertex = cluster.graph.getEdgeTarget(edge); if (targetVertex != null) { allTargetLabels.add(targetVertex.getNodename()); } } }
现有代码的优化建议
原代码固定循环100次,无法适配边数量动态变化的场景,替换为遍历集群边集合的方式更合理:
// 优化后的单个集群边数统计逻辑 int nodeCnt = 0; Vertex lastAddedNode = nodesList.get(nodesList.size() - 1); for (Edge edge : cluster.graph.getEdges()) { Vertex target = cluster.graph.getEdgeTarget(edge); if (cluster.graph.containsEdge(lastAddedNode.getNodename(), target.getNodename())) { int edgeCount = cluster.graph.getEdge(lastAddedNode.getNodename(), target.getNodename()); if (edgeCount > nodeCnt) { nodeCnt = edgeCount; } } }
内容的提问来源于stack exchange,提问作者Doktor_DOOM
相关产品推荐
相关产品推荐

