Цикл цикла в обход Neo4j Java - PullRequest
0 голосов
/ 15 марта 2019

Мне нужно сосчитать все узлы между несколькими начальными узлами и одним узлом назначения. Я настроил traverser для подсчета, но в некоторых случаях в путях есть петли, и процедура не заканчивается.

Что я могу сделать?

Это код 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()));   
}

Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...