0

我有 2 个相同类型的集合,集合中的每个对象都是 id 的键。我的目标是在两个集合中找到相同的对象,然后将一个字段相互比较。如果它们不是同一个字段,则存储差异。

我的问题是性能,对于每个规则,我都会重新扫描同一对象的集合。如果对象匹配然后运行所有字段验证而不是多次在集合中查找项目,有没有办法?

事实代码:

public class ReconcilerFact 
{
    private List<Security> securitySystem1;
    private List<Security> securitySystem2;

    public ReconcilerFact(List<Security> securities1, List<Security> securities2) 
    {
        this.securitySystem1 = securities1;
        this.securitySystem2 = securities2;
    }

    public List<Security> getSecuritySystem1() 
    {
        return securitySystem1;
    }

    public List<Security> getSecuritySystem2() 
    {
        return securitySystem2;
    }
}

流口水代码:

rule "ISIN Rule"        
    no-loop 
    when
        ## conditions           
        ##                          
        $recon : ReconcilerFact()
        $security1 : Security() from $recon.securitySystem1
        $security2 : Security(sSecId == $security1.sSecId, sISIN != $security1.sISIN) from $recon.securitySystem2       
    then 
        ## For the valid condition
        ##      
        result.add($security1, SecurityFields.ISIN, $security1.getsISIN(), $security2.getsISIN());          
end

rule "Cusip Rule"       
    no-loop 
    when
        ## conditions           
        ##                          
        $recon : ReconcilerFact()
        $security1 : Security() from $recon.securitySystem1
        $security2 : Security(sSecId == $security1.sSecId, sCusip != $security1.sCusip) from $recon.securitySystem2     
    then 
        ## For the valid condition
        ##      
        result.add($security1, SecurityFields.CUSIP, $security1.getsCusip(), $security2.getsCusip());           
end

rule "Sedol Rule"       
    no-loop 
    when
        ## conditions           
        ##                          
        $recon : ReconcilerFact()
        $security1 : Security() from $recon.securitySystem1
        $security2 : Security(sSecId == $security1.sSecId, sSedol != $security1.sSedol) from $recon.securitySystem2     
    then 
        ## For the valid condition
        ##      
        result.add($security1, SecurityFields.SEDOL, $security1.getsSedol(), $security2.getsSedol());           
end
4

1 回答 1

0

您可以插入所有安全对象并用组字段标记它们,而不是使用 from 条件元素。所以你最终会得到: $s1: Security(group == "Group1") $s2: Security(group == "Group2", sSecId == $security1.sSecId)

这会将每种证券视为事实,如果您修改一个实例,则只会重新评估该实例。

干杯

于 2011-10-21T10:33:23.033 回答