Слюни: Найти, если карта содержит частичный ключ и назначить его переменной - PullRequest
0 голосов
/ 21 мая 2019

У меня есть объект темы , который содержит карту сообщений .Ключи - это имена пользователей, а значения - это сообщения.Есть один пользователь с именем, которое всегда начинается с Пользователь , но заканчивается подстрокой, которая постоянно меняется.

Я знаю, что существует только один пользователь, соответствующий шаблону UserXXX.

Моя цель - получить ключ этого сообщения на основе частичного ключа Пользователь .

Я пытался использовать приведенный ниже код, используя matches оператор и подача в него регулярного выражения.Я также пытался извлечь ключ, используя известные имена пользователей: $key: String(this in ("User001","User002","User003")) from $keys

Но ни одна из моих попыток не сработала.

rule "Find messages by UserXXX"
  when
    topic: Topic()

    $keys: List() from topic.get("messages").keySet()
    $key: String(this matches "User.*") from $keys
  then
    System.out.println("The full username is " + $key); 
end

Учитывая карту:

{
  "User001": "Message",
  "Jasper": "Message",
  "Micks": "Message"
}

Я ожидаю получить ключ User001 в переменную $key.

1 Ответ

0 голосов
/ 21 мая 2019

Я протестировал другой способ, и он вернул желаемый результат:

rule "Find messages by UserXXX"
  when
    topic: Topic()

    $messagesMap: HashMap() from topic.get("messages")
    $messageEntry: Entry($userKey : key matches "User.*") from $messagesMap.entrySet()

  then
    System.out.println("The full username is " + $userKey); 
end

В этой попытке я фильтрую записи карты, чтобы получить тот, у которого есть ключ, соответствующий моему шаблону.

...