循环遍历Neo4j Java

时间:2019-03-15 11:22:04

标签: java neo4j

我必须计算多个起始节点和一个目标节点之间的所有节点。 我配置了一个遍历器进行计数,但是在某些情况下,路径中存在循环并且过程没有结束。

我该怎么办?

这是Java代码:

    Node destination = db.findNode(Label.label("Job"), "jobId", jobId);
    HashSet<Long> startNodes = new HashSet<>();
    HashSet<Long> pathNodes = new HashSet<>();
    int numPaths = 0;

    ResourceIterator<Node> iterator = db.findNodes(Labels.Inicio);
    while (iterator.hasNext()){
        startNodes.add(iterator.next().getId());
    }

    TraversalDescription td = db.traversalDescription()
            .depthFirst()
            .uniqueness( Uniqueness.NODE_PATH )
            .expand(PathExpanders.forTypeAndDirection(RelTypes.SIGUIENTE, Direction.INCOMING))
            .evaluator(new Evaluator() {
                @Override
                public Evaluation evaluate(Path path) {
                    if( startNodes.contains(path.endNode().getId())) {
                        return Evaluation.INCLUDE_AND_PRUNE;
                    }
                    return Evaluation.EXCLUDE_AND_CONTINUE;
                }
            });

    while(numPaths < startNodes.size()){
        for ( Path allpath: td.traverse(destination)) {
            for (Node node : allpath.nodes()) {
                pathNodes.add(node.getId());
            }
            numPaths+=1;
        }
    }

    return Stream.of(new LongResult((long)pathNodes.size()));   
}

谢谢!

0 个答案:

没有答案