Объединение Java Gremlin с ошибкой несовместимых типов проекта

У меня есть такой запрос гремлина, который отлично работает в консоли гремлина:

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 предоставляет инструменты для создания криптографических приложений и шифрования данных.


12
1

Ответ:

Решено

Я не уверен, какое решение вы ищете, но вам не нужна лямбда, чтобы решить эту проблему. Вы можете просто использовать второй обход:

g.V().has("Role", "id", "billing-admin").union(
        __.valueMap().by(__.unfold()),
        (GraphTraversal) __.project("app").by(__.out("FOR").valueMap().by(__.unfold()))
);