我有一个 UndirectedSparseGraph g,其中存储了两种节点,即都扩展节点的用户和线程。对于用户 u,我想检索其 2-dist 邻域,即与 u 链接的其他用户,因为他们对属于 u 的 1-dist 邻域的线程具有优势。我知道 KNeighborhoodFilter 是从调用者节点“以半径”k 检索节点的方式...这意味着,在我的情况下,将返回 1 跳的线程和 2 跳的用户,因此我必须过滤结果集合。这是我到目前为止所拥有的:
// filter users in 2-dist nei
Predicate<Node> onlyUsers = new Predicate<Node>() {
@Override
public boolean apply(Node node) {
return node.getName().startsWith("u");
}
};
// find neighbors of nodes with degree i
Filter<Node, Edge> filter = new KNeighborhoodFilter<Node, Edge>(u, 2, KNeighborhoodFilter.EdgeType.IN_OUT);
// retrieve the nodes - but here we have both types of nodes
Collection<Node> twoDistNei = filter.transform(g).getVertices();
// filter the collection to retain only threads
Collection<Node> twoDistUsers = Collections2.filter(twoDistNei, onlyUsers);
我用这种方法走在正确的轨道上吗?还是我应该遵循不同的模式来完成我的任务,即在距离选定用户 2 处检索用户?
最好的问候,西蒙娜