我有三个对象,对象 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代码是一个好习惯,还是我应该通过调用一些函数来移动一些代码。目标是保持简单,以便企业将来可以管理它。