Drools:查找映射是否包含部分键并将其分配给变量

时间:2019-05-21 10:05:20

标签: java drools

我有一个主题对象,其中包含一个邮件地图。键是用户名,值是消息。 有一个用户的名称始终以 User 开头,但以始终更改的子字符串结尾。

我知道只有一个与 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 :(得分:0)

我已经测试了另一种方法,它返回了所需的结果:

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

在这种尝试中,我过滤了地图项,以获取具有与我的模式匹配的键的项。