Java 如何从累积drl Drools中返回列表?
这是我的规则Java 如何从累积drl Drools中返回列表?,java,drools,rule-engine,drools-kie-server,Java,Drools,Rule Engine,Drools Kie Server,这是我的规则 rule "Multiple bookings via same mobile" when (stayDateGroupingIteration : StayDateGroupingDto($stayGroupedBookings : stayGroupedBookings)) and (QueryTypeDto( queryType == "multiple" )) $travellerCount :Number() from accumu
rule "Multiple bookings via same mobile"
when
(stayDateGroupingIteration : StayDateGroupingDto($stayGroupedBookings : stayGroupedBookings)) and (QueryTypeDto( queryType == "multiple" ))
$travellerCount :Number() from accumulate(BookingSummaryDtoList( $bookingSummaryDtoList : bookingSummaryDtoList) from $stayGroupedBookings,
init( int count=0; List<String> globalList= new ArrayList(); Set<String> duplicateSet=new HashSet();),
action(
for(Object bookingSummary : $bookingSummaryDtoList)
{
if(((BookingSummaryDto)bookingSummary).getTravellerId()!=null)
{
String travellerId=((BookingSummaryDto)bookingSummary).getTravellerId().toString();
Set<String> finalDuplicateSet=MultiBookingFraudServiceImpl.checkDuplicates(travellerId,globalList,duplicateSet);
count=count+1;
}
}
),
result( new Integer(count)))
then
//some action to be taken here
System.out.println($travellerCount);
end
规则“通过同一手机进行多个预订”
什么时候
(stayDateGroupingIteration:StayDateGroupingDto($stayGroupedBookings:stayGroupedBookings))和(QueryTypeDto(queryType==“多”))
$stayGroupedBookings中的$travellerCount:Number()(BookingSummaryDtoList($BookingSummaryDtoList:BookingSummaryDtoList)),
init(int count=0;List globalList=new ArrayList();Set duplicateSet=new HashSet();),
行动(
for(对象bookingSummary:$bookingSummaryDtoList)
{
if(((BookingSummaryDto)bookingSummary).getTravelerid()!=null)
{
字符串TravelerId=((BookingSummaryDto)bookingSummary).GetTravelerId().toString();
Set-finalDuplicateSet=MultiBookingFraudServiceImpl.checkDuplicates(travellerId、globalList、duplicateSet);
计数=计数+1;
}
}
),
结果(新整数(计数)))
然后
//这里需要采取一些行动
系统输出打印项次($travellerCount);
结束
我怎么还这台电视机
最终复制集
从acculate代替count开始,我不想在java类中使用任何全局变量或静态变量。这是可以做到的还是我需要遵循其他方法?希望此代码能帮助您获得所需:
rule "Multiple bookings via same mobile"
when
(stayDateGroupingIteration : StayDateGroupingDto($stayGroupedBookings : stayGroupedBookings)) and (QueryTypeDto( queryType == "multiple" ))
$duplicateTravellerList :List() from accumulate(BookingSummaryDtoList( $bookingSummaryDtoList : bookingSummaryDtoList) from $stayGroupedBookings,
init( int count=0; List<String> globalList= new ArrayList(); Set<String> duplicateSet=new HashSet(); List<String> finalDuplicateSet=new ArrayList();),
action(
for(Object bookingSummary : $bookingSummaryDtoList)
{
if(((BookingSummaryDto)bookingSummary).getTravellerId()!=null)
{
String travellerId=((BookingSummaryDto)bookingSummary).getTravellerId().toString();
finalDuplicateSet.add(MultiBookingFraudServiceImpl.checkDuplicates(travellerId,globalList,duplicateSet));
count=count+1;
}
}
),
result( new ArrayList(finalDuplicateSet)))
then
//some action to be taken here
System.out.println($duplicateTravellerList);
end
规则“通过同一手机进行多个预订”
什么时候
(stayDateGroupingIteration:StayDateGroupingDto($stayGroupedBookings:stayGroupedBookings))和(QueryTypeDto(queryType==“多”))
$stayGroupedBookings中的$duplicateTravellerList:List()(BookingSummaryDtoList($BookingSummaryDtoList:BookingSummaryDtoList)),
init(int count=0;List globalList=new ArrayList();Set duplicateSet=new HashSet();List finalDuplicateSet=new ArrayList();),
行动(
for(对象bookingSummary:$bookingSummaryDtoList)
{
if(((BookingSummaryDto)bookingSummary).getTravelerid()!=null)
{
字符串TravelerId=((BookingSummaryDto)bookingSummary).GetTravelerId().toString();
添加(MultiBookingFraudServiceImpl.checkDuplicates(travellerId、globalList、duplicateSet));
计数=计数+1;
}
}
),
结果(新ArrayList(finalDuplicateSet)))
然后
//这里需要采取一些行动
System.out.println($DuplicateTravelerList);
结束
您是否尝试返回结果部分中的集合
?这不起作用,我已经尝试过了。以下是错误文本=规则编译错误finalDuplicateList无法解析为variable@Yatin您是否在init语句中添加了finalDuplicateSet?谢谢@Prog\G我犯了一个非常愚蠢的错误,我直接返回了result like result(finalDuplicateSet)中的对象假设装箱后只需要返回原语(就像我对int类型变量count result(newinteger(count))所做的那样),但这是特定于drool的。谢谢你的帮助