检查数组中的项目,然后编辑此项目

时间:2013-06-04 08:31:27

标签: arraylist drools

我有一个数组检查所有“OpExs”,这些都将采用如下格式。

<opex code = "##">
<nettAmount></nettAmount>
<grossAmount></grossAmount>
<accessibility></accessibility>
</opex>

可能有50个,所以我想采取一个特定的(让我们说“MA”)并设置其金额等,我有以下但我只知道如何创建一个新的操作系统并设置其值。
我不知道如何改变现有的opex值。 (我使用了一个布尔值,因为当数组访问它们时我无法编辑项目。

rule "Testing"
salience 500
when
    $result : Result($opexs : optionalExtras)
    Policy($rType : rtpType)
then
        boolean opexThere = false;
        for (OptionalExtra oe : (ArrayList<OptionalExtra>) $opexs){
        logger.info("Array created – Size = ["+$opexs.size()+"]");
            if (oe.getCode().equals("MA"))
            {
                boolean opexThere = true;
            }
            if (opexThere){
            #OptionalExtra opex = new OptionalExtra();
            logger.info("OpEx MA exists original net/gross = ["+oe.getCode()+"-/-"+oe.getNettAmount()+"-/-"+oe.getGrossAmount());
                opex.setNettAmount(1000);
                opex.setGrossAmount(1000);
                opex.setAccessibility("C");
                $result.addOptionalExtra(opex);
                $result.setOpexFlexed(true);
            }               
        }
end

如果我要删除#并包含一个opex.setCode(“MA”); 这只会创建第二个MA opex,这不是我想做的。我需要编辑现有的Opex。

任何帮助都会非常感激,因为我尝试了各种技术,我通常会使用它,但似乎无法使用。

1 个答案:

答案 0 :(得分:0)

过度思考它,把它带回基础并立即解决它,

rule "modify Opex"
no-loop true
when
    $result : Result($opexList : optionalExtras)
then
       for(OptionalExtra $opex : (ArrayList<OptionalExtra>)$opexList)       {
              if ($opex.getCode().equals("A3")) {
                     $opex.setGrossAmount(1000);
                     logger.info("Amended OPEX " + $opex.getCode());
                     $result.setOpexFlexed(true);
                     $result.setRulesetChanged(true);
              }
       }
end

对Java / Drools的讨论感到抱歉。