Объединение 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
Основы программирования на Java
Java - это высокоуровневый объектно-ориентированный язык программирования, основанный на классах.
Концепции JavaScript, которые вы должны знать как JS программист!
Концепции JavaScript, которые вы должны знать как JS программист!
JavaScript (Js) - это язык программирования, объединяющий HTML и CSS с одной из основных технологий Всемирной паутины. Более 97% веб-сайтов используют...
0
0
12
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

Большое спасибо Степан! Лично для меня это было неочевидно

Sam Ivichuk 17.05.2022 16:46

Другие вопросы по теме