如何在循环语句中为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(); }
关键细节说明
- Traversal的不可变性:必须将每次
property()返回的新Traversal赋值回变量,这样才能把所有属性操作串联成一个完整的操作链。 - 判空逻辑修正:原代码里的
data[i] == ""是错误的——在Java中,==比较的是字符串对象的引用而非内容。应该用isEmpty()或者"".equals(data[i])判断空字符串,同时先判断data[i] != null避免空指针异常。 - 执行遍历:最后一定要调用
iterate()(无需返回结果时)或者next()/toList()(需要获取操作后的顶点时),否则所有属性设置只是构建了Traversal,并没有真正提交到数据库执行。
内容的提问来源于stack exchange,提问作者Lanre Adeoluwa
相关产品推荐
相关产品推荐

