在Java中使用gremlin遍历图形时,如何收集属性值?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在Java中使用gremlin遍历图形时,如何收集属性值?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1268字,纯文字阅读大概需要2分钟。
内容图文
![在Java中使用gremlin遍历图形时,如何收集属性值?](/upload/InfoBanner/zyjiaocheng/684/17787931d7574f55ab65ee8edd7cd09b.jpg)
我图中的每个顶点至少都有一个name属性.我有一个标签L集合S的名称值.现在,我想从具有集合S中名称的顶点中,通过具有边缘标签EL的特定出局边缘,收集(递归)所有顶点的name属性值.
我当前对名称为S1的单个启动节点的解决方案如下所示:
g.traversal().V().hasLabel(L)
.has("name", S1)
.repeat(__.optional(__.out(EL)))
.until(__.out(EL).count().is(0))
.path()
.forEachRemaining(path -> {
path.forEach(e -> System.out.println(((Vertex)e).property("name").value()));});
println只是看到这会产生预期的结果,通常我会在Set中收集名称.
有没有更好的方法来收集通过标签EL通过出线边可到达的所有顶点的name属性值?
从多个顶点开始的最佳方法是什么(从Set S仅知道名称)?
当前,该结构是一棵树,但是如果按周期排列,上面的代码是否可以防止无限循环?如果没有,该怎么办?
解决方法:
您的方法是一个好的开始.
要从一组多个顶点开始,请使用P.within()谓词. TinkerPop提供了几种other predicates.
使用simplePath()防止重复通过循环.
使用store()遍历图形时,可以跟踪项目. by("name")调制器将存储“名称”属性而不是顶点.
要获取结果,请使用cap()输出遍历期间存储的项目.此时的结果是Set,其中可能包含重复项.使用unfold()将Set变成一个迭代器,我们可以dedup()然后以toSet()完成.
graph.traversal().V().hasLabel(L).has("name", P.within(S)).
repeat( __.out(EL).simplePath().store("x").by("name") ).
until( __.outE(EL).count().is(0) ).
cap("x").unfold().dedup().toSet()
内容总结
以上是互联网集市为您收集整理的在Java中使用gremlin遍历图形时,如何收集属性值?全部内容,希望文章能够帮你解决在Java中使用gremlin遍历图形时,如何收集属性值?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。