java Drools规则检查Hashmap键是否存在

ljsrvy3e  于 2023-06-28  发布在  Java
关注(0)|答案(1)|浏览(118)

我使用下面的规则来检查hashmap键是否等于“templateUUID”。下面的规则运行没有错误,但值没有在所需的JSON中更改。

rule "Update HashMap Value"
when
    $mobiSubset: Mobi_Subset()
    $fileNameMappings: Map(this == $mobiSubset.fileNameMappings)
    $key: String(this == "templateUUID") from $fileNameMappings.keySet()
then
    $fileNameMappings.put($key, "metadata.json");
end

Json: 
{
    "titleId" : "3510585",
    "contentType" : "Movie",
    "titleBrief" : "Annihilation",
    "titleBriefHD" : "Annihilation HD",
    "downloadRights" : true,
    "downloadNoHours" : 720,
    "streamingRights" : true,
    "fileNameMappings":
    {
      "bignight_3519599.scc":"bignight_3519599.scc",
      "bignight_3519599.mp4":"bignight_3519599.mp4",
      "templateUUID":"metadata.xml"
    }
}
rsl1atfo

rsl1atfo1#

我不明白你为什么要这样做,但这里有正确的语法。

rule "Update HashMap Value"
when
    // Get the map
    Mobi_Subset( $fileNameMappings: fileNameMappings != null )

    // Check that the key exists
    exists( String( this == "templateUUID" ) from $fileNameMappings.keySet() )
then
    // Update the value
    $fileNameMappings.put("templateUUID", "metadata.json");
end

如果你只是想用metadata.json替换metadata.xml,我会这样做:

rule "Update HashMap Value"
when
    Mobi_Subset( $fileNameMappings: fileNameMappings != null )
    Map( this["templateUUID"] == "metadata.xml" )
then
    $fileNameMappings.put("templateUUID", "metadata.json");
end

第一个版本将盲目覆盖templateUUID字段中的Map中的 * 任何内容 *。第二个版本只会将其更新为metadata.json,如果它最初是metadata.xml。如果密钥不存在,两个版本都不会执行任何操作。

相关问题