Gremlin の先頭をあまり変更せず、パス式の最後から計算するようにしました。これにアプローチするより良い方法があるかもしれませんが、おもちゃのグラフを使用して私が持っているものは次のとおりです。
gremlin> g = TinkerGraphFactory.createTinkerGraph()
==>tinkergraph[vertices:6 edges:6]
gremlin> g.v(1).outE.inV.loop(2){it.loops<3}{true}.path
==>[v[1], e[7][1-knows->2], v[2]]
==>[v[1], e[8][1-knows->4], v[4]]
==>[v[1], e[9][1-created->3], v[3]]
==>[v[1], e[8][1-knows->4], v[4], e[10][4-created->5], v[5]]
==>[v[1], e[8][1-knows->4], v[4], e[11][4-created->3], v[3]]
そのため、エッジがパスに表示されるように outE.inV を含めることに注意してください。次に、パスに 2 番目のクロージャを追加して、重みを端から外します。
gremlin> g.v(1).outE.inV.loop(2){it.loops<3}{true}.path{it.name}{it.weight}
==>[marko, 0.5, vadas]
==>[marko, 1.0, josh]
==>[marko, 0.4, lop]
==>[marko, 1.0, josh, 1.0, ripple]
==>[marko, 1.0, josh, 0.4, lop]
次に、その出力を合計された重みに操作するのは、一連の Groovy JDK です。
gremlin> g.v(1).outE.inV.loop(2){it.loops<3}{true}.path{it.name}{it.weight}.transform{it.toList().split{i->"${i}".isNumber()}}.collect{[it[0].sum(),it[1]]}
==>[0.5, [marko, vadas]]
==>[1.0, [marko, josh]]
==>[0.4, [marko, lop]]
==>[2.0, [marko, josh, ripple]]
==>[1.4000000059604645, [marko, josh, lop]]
だから、私は(ピーターが提案したように)変換を追加し、アイテムのリストを重みのものと名前のものに分割します(値が「isNumber」かどうかを確認するだけで...別のアプローチが必要になる場合があります)。その上でマップ関数を実行して、重みのコレクションを sum() し、名前のコレクションを返します。