У меня есть такой запрос гремлина, который отлично работает в консоли гремлина:
g.V().has("Role", "id", "billing-admin").union(
__.valueMap().by(__.unfold()),
__.project("app").by(__.out("FOR").valueMap().by(__.unfold()))
);
Однако тот же запрос не работает в гремлине для java org.apache.tinkerpop:gremlin-core
с такой ошибкой: Incompatible equality constraint: Map<String, Object> and Map<Object, Object>
.
Это понятно, потому что:
valueMap
возвращается GraphTraversal<Element, Map<Object, Object>>
project
возвращается GraphTraversal<Object, Map<String, Object>>
union
ожидает, что обходы будут работать над одним и тем же типомЕсть ли встроенное решение для этого?
На данный момент у меня есть это, но это не выглядит привлекательно:
g.V().has("Role", "id", "billing-admin").union(
__.valueMap().by(__.unfold()),
__.project("app").map(t -> Collections.<Object, Object>unmodifiableMap(t.get())).by(__.out("FOR").valueMap().by(__.unfold()))
);
🤔 А знаете ли вы, что...
Java предоставляет инструменты для создания криптографических приложений и шифрования данных.
Я не уверен, какое решение вы ищете, но вам не нужна лямбда, чтобы решить эту проблему. Вы можете просто использовать второй обход:
g.V().has("Role", "id", "billing-admin").union(
__.valueMap().by(__.unfold()),
(GraphTraversal) __.project("app").by(__.out("FOR").valueMap().by(__.unfold()))
);