Я предполагаю, что вы знаете, как фильтровать вершины «A» и «B» и начать обход с:
gremlin> g = new TinkerGraph()
==>tinkergraph[vertices:0 edges:0]
...
gremlin> g.v("A","B").outE.groupBy{it.outV.next()}{[it.amount,it.inV.next()]}.cap.next()
==>v[A]=[[200, v[C]], [100, v[B]], [300, v[M]]]
==>v[B]=[[300, v[D]], [1300, v[L]], [200, v[E]]]
так выше вы получаете все элементы «A» и «B», сгруппированные с их «суммой» (не уверен, что это число представляет в вашем домене). После этого просто используйте «сокращение» для сортировки и всплытия первых двух элементов в списке:
gremlin> g.v("A","B").outE.groupBy{it.outV.next()}{[it.amount,it.inV.next()]}{it.sort{a,b->b[0]<=>a[0]}[0..<2]}.cap.next()
==>v[A]=[[300, v[M]], [200, v[C]]]
==>v[B]=[[1300, v[L]], [300, v[D]]]
Да, это работает. что если для v [A] существует 4 outV(), а для v [B] есть 2 outV(), и если я пройду [0 .. <4], то он выдает исключениеIndex = 4. – Abhi
Я думаю, вы могли бы сделать 'it.sort {a, b-> b [0] <=> a [0]}. Take (2)' –
да да, он работает. многие из них Стивен. :) – Abhi