私は UndirectedSparseGraph g を持っており、そこには 2 種類のノード、つまりノードを拡張するユーザーとスレッドが格納されています。ユーザー u について、その 2 距離の近隣、つまり、u の 1 距離の近隣に属するスレッドにエッジがあるため、u とリンクしている他のユーザーを取得したいと思います。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 にあるユーザーを取得するというタスクを達成するために、別のパターンに従う必要がありますか?
よろしく、シモーネ