You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在循环语句中为GraphTraversal对象运行时动态添加多属性方法?

在循环中动态为GraphTraversal添加多属性的正确做法

你遇到的问题核心是没搞清楚GraphTraversal的不可变特性——每次调用它的方法(比如property())都会返回一个全新的Traversal实例,而不是修改原有的实例。你原来的代码里,每次循环都重新调用graphTraversal.V(data[15]).property(...),这相当于每次都创建一个独立的Traversal,只设置单个属性,之前的操作完全没被保留,自然达不到批量设置多属性的效果。

正确实现方式

你需要先获取目标顶点的基础Traversal,然后在循环中不断叠加property()操作,最后统一执行这个完整的Traversal。示例代码如下:

while ((currentDataLine = nodeBufferedReader.readLine()) != null) { 
    // 分割图数据
    data = currentDataLine.split(DELIMITER); 
    // 先获取目标顶点的基础遍历
    GraphTraversal<Vertex, Vertex> vertexTraversal = graphTraversal.V(data[15]);

    for (int i = 0; i < data.length - 1; i++) { 
        if (i == 15) continue; 
        // 修正判空逻辑:避免空指针,字符串比较不要用==
        if (data[i] == null || data[i].isEmpty()) continue; 
        // 叠加property操作,把新的Traversal赋值回变量
        vertexTraversal = vertexTraversal.property(header[i], data[i]); 
    }

    // 执行遍历,将所有属性设置提交到图数据库
    vertexTraversal.iterate();
}

关键细节说明

  1. Traversal的不可变性:必须将每次property()返回的新Traversal赋值回变量,这样才能把所有属性操作串联成一个完整的操作链。
  2. 判空逻辑修正:原代码里的data[i] == ""是错误的——在Java中,==比较的是字符串对象的引用而非内容。应该用isEmpty()或者"".equals(data[i])判断空字符串,同时先判断data[i] != null避免空指针异常。
  3. 执行遍历:最后一定要调用iterate()(无需返回结果时)或者next()/toList()(需要获取操作后的顶点时),否则所有属性设置只是构建了Traversal,并没有真正提交到数据库执行。

内容的提问来源于stack exchange,提问作者Lanre Adeoluwa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:26:28