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

Drools: Find if a map contains a partial key and assign it to a a variable

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

我知道只有一个用户对应模式UserXXX

我的目标是根据部分密钥 User.

获取此消息的密钥

我尝试使用下面的代码,使用 matches 运算符并为其提供模式正则表达式。 我还尝试使用已知用户名提取密钥: $key: String(this in ("User001","User002","User003")) from $keys

但我的 none 次尝试奏效了。

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

我测试了另一种方法,它返回了我想要的结果:

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

在这次尝试中,我过滤了映射条目以获取具有与我的模式匹配的键的条目。