如何迭代drl中的嵌套列表并检查不同对象的公共值?

时间:2018-06-17 17:48:02

标签: java drools rules rule-engine drools-kie-server

我有三个物体, 对象BookingSummaryDto有旅行者ID

public class BookingSummaryDto {    
    private String travellerId;
//getter setters        
}

对象BookingSummaryDtoList具有BookingSummaryDto对象列表

@Getter
@Setter
public class BookingSummaryDtoList {

    private List<BookingSummaryDto> bookingSummaryDtoList;
}

然后对象StayDateGroupingDto具有BookingSummaryDtoList对象列表

@Getter
@Setter
public class StayDateGroupingDto {

    List<BookingSummaryDtoList> stayGroupedBookings;

}

目标是在StayDateGroupingDto中检查重复的旅行者ID。这将需要迭代列表StayDateGroupingDto以获取BookingSummaryDtoList,然后迭代它以获取BookingSummaryDto对象并最终获得旅行者ID并维护另一个重复的旅行者ID列表。

编辑1

这是我提出的原始解决方案,但我不确定这是否是最佳解决方案,并且还存在一些问题。

   rule "test data"
    when
        stayDateGroupingIteration : StayDateGroupingDto($stayGroupedBookings : stayGroupedBookings)  
        $travellerCount :Number() from accumulate(BookingSummaryDtoList( $bookingSummaryDtoList : bookingSummaryDtoList) from $stayGroupedBookings,
        init( int count=0;),
        action( 
        for(Object bookingSummary : $bookingSummaryDtoList)
        {


            if(((BookingSummaryDto)bookingSummary).getTravellerId()!=null)
            {   String travellerId=((BookingSummaryDto)bookingSummary).getTravellerId().toString();
                System.out.println(travellerId);
                LoyalityFraudService.checkDuplicates(travellerId);
                count=count+1;
            }
        }
        ),
        result( new Integer(count)))
    then
        System.out.println($travellerCount);
        System.out.println( "clean" );
end

上述规则的几个问题是 我如何将这两个初始化放在accumulate的init块中

  

列出globalList = new ArrayList&lt;&gt;();           列表重复=新的ArrayList&lt;&gt;();

还是有另一种处理对象重复的方法吗? 还有上面的规则,在drl中编写如此多的java代码是一个好习惯,还是应该通过调用某些函数来移动一些代码。目标是保持简单,以便企业将来可以管理它。

0 个答案:

没有答案