GraphTraversal<Vertex, Map<String, Object>> tsList = traversalSource.V().has("request","id_key",114).valueMap();
while(tsList.hasNext())
{
System.out.println(tsList.next().get("status")); //prints result
System.out.println(tsList.next().get("tree_id_key")); //prints result
System.out.println(tsList.next().get("username")); //here throws Exception for any vertex.
System.out.println(tsList.next().get("tree_status"));
}
当我运行上面的查询时,我得到任何第一个和第二个propertyKey的值。但在得到两个Keys的答案后,它会为任何propertyKey抛出NoFastSuchElementException ...请帮助我..我可以解决这个问题吗?
但使用以下查询我可以得到答案:
GraphTraversal<Vertex, Map<String, Object>> tsList = traversalSource.V().has("request","id_key",114).values("status","tree_id_key","username","tree_status");
while(tsList.hasNext())
{
System.out.println(tsList.next());//prints "status" value
System.out.println(tsList.next());//prints "tree_id_key" value
System.out.println(tsList.next());//prints "username" value
System.out.println(tsList.next());//prints "tree_status" value
}
更新
GraphTraversal<Vertex, Map<String, Object>> ts = traversalSource.V().has("request","id_key",113).valueMap();
while(ts.hasNext())
{
Map<String, Object> tsList=ts.next();
SuiteIdKey=(long)((ArrayList)tsList.get("suiteKey")).get(0);
seqe=(int)((ArrayList)tsList.get("sequence")).get(0);
}
在上面的查询中,ts将返回许多行,对于每一行,我将获得suiteIdkey,seqe ..我能够得到答案。但tsList是Map&lt;&gt;,当我使用像=(long)tsList.get(&#34; suiteKey&#34;),没有ArrayList时,它不会直接返回答案。这是正确的方法吗?请帮助我。
答案 0 :(得分:2)
在这两次遍历中,你要求两个不同的东西。第一个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。
请注意,通常不建议返回整个顶点对象。它有点类似于SQL中的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"));