深入学习Gremlin(22):遍历终止terminal

本文深入解析Gremlin图查询中的遍历终止操作,包括:是否包含元素、获取元素、组合元素等。举例说明了、和等Step的用法,并解释了在HugeGraph图数据库中执行的细节,以及这些操作如何影响遍历器的行为。通过实例,读者可以更好地理解和应用这些终止遍历的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第22期 Gremlin Steps:

hasNext()next()tryNext()toList()toSet()toBulkSet()fill()iterate()

本系列文章的Gremlin示例均在HugeGraph图数据库上执行,环境搭建可参考准备Gremlin执行环境,本文示例均以其中的“TinkerPop关系图”为初始数据。

tinkerpop关系图

上一期:深入学习Gremlin(21):局部操作local

说明

Gremlin 中有一类特殊的操作,它能够终止遍历器的“遍历”行为,使其执行并返回结果。在这里要强调的一点:原生的 Gremlin 语句通常都是用遍历器连接起来的,但其实这些连接的过程并不会执行 Gremlin 语句,只有走到了terminalStep 时才会执行。这个模式类似于 Spark 中对RDDmapaction操作。

  • hasNext: 判断遍历器是否含有元素(结果),返回布尔值;
  • next: 不传参数时获取遍历器的下一个元素,也可以传入一个整数 n,则获取后面 n 个元素;
  • tryNext: hasNextnext的结合版,返回一个Optional对象,如果有结果还需要调用get()方法才能拿到;
  • toList: 将所有的元素放到一个List中返回;
  • toSet: 将所有的元素放到一个Set中返回,会去除重复元素;
  • toBulkSet: 将所有的元素放到一个能排序的List中返回,重复元素也会保留;
  • fill: 传入一个集合对象,将所有的元素放入该集合并返回,其实toListtoSettoBulkSet就是通过fillStep实现的;
  • iterate: 这个 Step 在终止操作里面有点特殊,它并不完全符合终止操作的定义。它会在内部迭代完整个遍历器但是不返回结果。

那肯定有细心的同学要问了,前面我们介绍了那么多的 Step 很多都没有加terminalStep 啊,为什么也能返回结果呢?其实这是 Tinkerpop 的 Gremlin 解析引擎对遍历器对象调用了一个IteratorUtils.asList()方法,又调用了它内部的fill()方法(注意:不是上面讲到的fill()Step)。

实例讲解

下面通过实例来深入理解每一个操作。

  1. Step hasNext()

    示例1:

    // 判断顶点“linary”是否包含“created”出顶点
    g.V('linary').out('created').hasNext()
    

    示例2:

    // 判断顶点“linary”是否包含“knows”出顶点
    g.V('linary').out('knows').hasNext
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值