Я бы, вероятно, использовал другой подход к моему обходу и избегал inject()
в этом случае. С помощью inject()
вам нужно будет развернуть свой список Map
объектов, а затем выполнить поиск вершин для каждого, что, вероятно, дорого для всех графических систем, если ваш список длинный. Я бы также поинтересовался, можете ли вы написать обход таким образом, чтобы системы графов могли оптимизировать поиск вершин с помощью индекса.
Учитывая все это и вашу конечную цель обхода, чтобы обновить свойства из найденных вершин, я думаю, я бы выбрал такой подход:
gremlin> g = TinkerGraph.open().traversal()
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
gremlin> g.addV('user').property('id', 1)
==>v[0]
gremlin> g.addV('user').property('id', 2)
==>v[2]
gremlin> m = [["id": 1], ["id": 2, "something":"anything"]]
==>[id:1]
==>[id:2,something:anything]
gremlin> ids = m.collect{it.id}
==>1
==>2
gremlin> g.withSideEffect('m',m).
......1> V().has('user','id',within(ids)).as('v').
......2> sideEffect(select('m').unfold().
......3> filter(select('id').as('ii').
......4> where('ii',eq('v')).
......5> by().
......6> by('id')).
......7> unfold().as('kv').
......8> select('v').
......9> property(select('kv').by(keys),select('kv').by(values)))
==>v[0]
==>v[2]
gremlin> g.V().elementMap()
==>[id:0,label:user,id:1]
==>[id:2,label:user,id:2,something:anything]
Здесь мы находим все вершины с within()
как один поиск, а затем filter()
список данных по текущей вершине "id", чтобы затем обновить свойства.