Поскольку Gremlin не поддерживает строковые операции (например, split
, charAt
и т. Д.), Ваш единственный шанс - лямбда.Похоже, вы уже поняли это, но ваше решение выглядит слишком сложным для меня.Вы можете использовать что-то гораздо более простое, например:
g.V().hasLabel('office').
has('name', filter {it.get()[2] != '-'}).
project('Office Name').
by('name')
Однако обратите внимание, что этот фильтр будет генерировать исключение, если имя офисного имени содержит менее 3 символов.Таким образом, вам лучше проверить, что String
достаточно длинный:
g.V().hasLabel('office').
has('name', filter {it.get().length() > 2 && it.get()[2] != '-'}).
project('Office Name').
by('name')
... или использовать сопоставление с шаблоном RegEx (что довольно хорошо и просто в Groovy):
g.V().hasLabel('office').
has('name', filter {it.get() ==~ /.{2}-.*/}).
project('Office Name').
by('name')
Основная причина, по которой ваш обход не сработал, заключается в том, что charAt
возвращает Character
, который затем сравнивается с String
-
, следовательно, каждое название офиса будет проходить через фильтр neq
.