1

我有三个对象,对象 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

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

列表 globalList=new ArrayList<>(); 列出重复项=new ArrayList<>();

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

4

0 回答 0