Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 遍历图与过滤_Java_Orientdb - Fatal编程技术网

Java 遍历图与过滤

Java 遍历图与过滤,java,orientdb,Java,Orientdb,我正在尝试查询/遍历orientDB图,但不知道如何在遍历过程中进行过滤 OTraverse traverse = txGraph.traverse(); traverse.setMaxDepth(3); for(OIdentifiable obj : traverse.fields("in_friend","in","out","out_friend").target(new ORecordId("#15:8")).predicate(new OCommand

我正在尝试查询/遍历orientDB图,但不知道如何在遍历过程中进行过滤

OTraverse traverse = txGraph.traverse(); 
        traverse.setMaxDepth(3);
        for(OIdentifiable obj : traverse.fields("in_friend","in","out","out_friend").target(new ORecordId("#15:8")).predicate(new OCommandPredicate(){

            public Object evaluate(OIdentifiable iRecord, ODocument arg1, OCommandContext arg0) {
                Vertex v = txGraph.getVertex( iRecord.getIdentity());
                if (iRecord.getClass().equals("person") || (v.getProperty("test")!= null && v.getProperty("test").toString().equals("continue"))){

                    log.println(v.getProperty("test").toString());
                    return true;
                }

                return false;
            }
该代码从节点#15:8(一个人)开始遍历,然后沿着类型为“friend”的所有边进行遍历。我不完全确定我做得是否正确,但结果看起来是正确的(直到我包含谓词函数)

我现在想做的是,只跟踪那些类型为“friend”且具有值为“continue”的属性“test”的边

在这里使用代码中的谓词将在遇到任何不符合条件的顶点或边时立即停止遍历

有没有一种方法可以使它不跟随那些特定的边,而是沿着其他边继续搜索图形


埃塔:我试图用Java来做这件事,我更喜欢这样做;我愿意接受别人告诉我为什么我不应该,很难。

这里有几个问题:

  • 您不确定当前的
    iRecord
    是否是一个顶点(它可能是一条边),因此以下内容没有多大意义:

     Vertex v = txGraph.getVertex( iRecord.getIdentity());
    
  • 您正在检查
    .getClass()
    ,但它返回的是iRecord的Java类,这可能只是一个文档。尝试按以下方式更改代码:

    ODocument doc = iRecord.getRecord();
    String className = doc.getSchemaClass().getName();
    Object prop = doc.field("test");
    if (className.equalsIgnoreCase("person") || (prop != null && prop.toString().equals("continue"))){
         return true;
    }