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