GraphTraversal< Vertex,Map< String,Object>> tsList = traversalSource.V()。has(“request”,“id_key”,114).valueMap();而(tsList.hasNext()){的System.out.println(tsList.next()。获得(” …
你在这两次遍历中要求两种不同的东西。第一个用 valueMap() 要求将顶点转换为a Map ,所以你不想继续打电话 next() 在那个循环中。做就是了:
valueMap()
Map
next()
Map<String, List<Object>> m = traversalSource.V().has("request", "id_key", 114). valueMap().next(); System.out.println(m.get("status").get(0)); System.out.println(m.get("tree_id_key").get(0)); System.out.println(m.get("username").get(0)); System.out.println(m.get("tree_status").get(0));
请记住,我假设你的遍历总是返回一个顶点...如果不是这样,那就解释了。
在你的第二次遍历中 values() 你要求Gremlin转换抓取那个顶点上那些特定属性的值并将它们流出来,因此你需要迭代多次调用next。
values()
请注意,通常不建议返回整个顶点对象。它有点类似于 SELECT * FROM table 在SQL中。最好只获取你想要获得的字段,然后摆脱丑陋的多属性问题 Map<String, List<Object>> :
SELECT * FROM table
Map<String, List<Object>>
Map<String, Object> m = traversalSource.V().has("request", "id_key", 114). project('s`,'tik', 'u', 'ts'). by('status'). by('tree_id_key'). by('username') by('tree_status'). next(); System.out.println(m.get("s")); System.out.println(m.get("tik")); System.out.println(m.get("u")); System.out.println(m.get("ts"));