gpt4 book ai didi

java - 当我在 java 的 gremlin 查询中使用 valueMap() 时,出现 NoFastSuchElementException

转载 作者:行者123 更新时间:2023-11-30 02:32:08 24 4
gpt4 key购买 nike

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 的值。但在获得两个键的答案后,它会对任何 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<>,当我像这样使用 =(long)tsList.get("suiteKey") 时,它不会直接返回答案,没有 ArrayList。这是正确的方法吗?请帮助我。

最佳答案

您在这两次遍历中要求两种不同的东西。第一个带有 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 进行迭代。

请注意,通常不建议返回整个顶点对象。它有点类似于 SELECT * FROM table在 SQL 中。最好只获取您想要获取的字段,这样就可以摆脱 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"));

关于java - 当我在 java 的 gremlin 查询中使用 valueMap() 时,出现 NoFastSuchElementException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44033634/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com