Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从累积drl Drools中返回列表?_Java_Drools_Rule Engine_Drools Kie Server - Fatal编程技术网

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的。谢谢你的帮助