我有 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