[rules-users] Collecting items in a List
Wolfgang Laun
wolfgang.laun at gmail.com
Thu Dec 20 03:46:27 EST 2012
Assuming that you call kSession.fireAllRules() only once after the insertion
of all facts, you have to select a single representative for all Alert facts
with identical case number.
Again assuming that the alertNo is unique, you can write
when
Alert( $caseNumber : caseNumber, $alertNo: alertNo )
not Alert( alertNo < $alertNo )
$list : List( ) from collect($alertalert : Alert( caseNumber ==
$caseNumber))
then
-W
On 20/12/2012, devan.vanreenen at gmail.com <devan.vanreenen at gmail.com> wrote:
> Hi there,
>
> I have checked existing posts and able to find problems which are similar
> to
> mine but not exactly.
> I have an Alert object as per below, several alert instances may have the
> same caseNumber
> I am trying to collect all the Alert instances that have the same
> caseNumber, the rule is below, the rule below collects the items correctly
> but the execution happens for each Alert object inserted into the knowledge
> session. How can I get around this?
>
>
> public class Alert {
>
>
> int caseNumber;
> short alertNo;
>
>
> public int getCaseNumber() {
> return caseNumber;
> }
> public void setCaseNumber(int caseNumber) {
> this.caseNumber = caseNumber;
> }
> public short getAlertNo() {
> return alertNo;
> }
> public void setAlertNo(short alertNo) {
> this.alertNo = alertNo;
> }
> @Override
> public String toString() {
> return "Alert [caseNumber=" + caseNumber + ", alertNo=" + alertNo + "]";
> }
>
>
> }
>
> rule 'Collect Alerts for a specific case'
> dialect 'java'
> when
> Alert( $caseNumber : caseNumber)
> $list : List( ) from collect($alertalert : Alert( caseNumber ==
> $caseNumber))
> then
> for(Object a : $list){
> System.out.println(a);
> }
> end
>
>
> I insert 5 alert objects as per below
>
>
> Alert alert1 = new Alert();
> alert1.setAlertNo((short)1);
> alert1.setCaseNumber(830826);
>
> Alert alert4 = new Alert();
> alert4.setAlertNo((short)4);
> alert4.setCaseNumber(830826);
>
> Alert alert7 = new Alert();
> alert7.setAlertNo((short)7);
> alert7.setCaseNumber(830826);
>
> Alert alert3 = new Alert();
> alert3.setAlertNo((short)3);
> alert3.setCaseNumber(820424);
>
> Alert alert5 = new Alert();
> alert5.setAlertNo((short)5);
> alert5.setCaseNumber(820424);
>
> I would like the output to be as follows
>
> Alert [caseNumber=820424, alertNo=3]
> Alert [caseNumber=820424, alertNo=5]
>
> Alert [caseNumber=830826, alertNo=7]
> Alert [caseNumber=830826, alertNo=4]
> Alert [caseNumber=830826, alertNo=1]
>
> but instead the output is
>
> Alert [caseNumber=820424, alertNo=5]
> Alert [caseNumber=820424, alertNo=5]
> Alert [caseNumber=820424, alertNo=3]
> Alert [caseNumber=820424, alertNo=5]
> Alert [caseNumber=820424, alertNo=3]
> Alert [caseNumber=830826, alertNo=7]
> Alert [caseNumber=830826, alertNo=7]
> Alert [caseNumber=830826, alertNo=4]
> Alert [caseNumber=830826, alertNo=7]
> Alert [caseNumber=830826, alertNo=4]
> Alert [caseNumber=830826, alertNo=7]
> Alert [caseNumber=830826, alertNo=4]
> Alert [caseNumber=830826, alertNo=1]
> Alert [caseNumber=830826, alertNo=7]
> Alert [caseNumber=830826, alertNo=4]
> Alert [caseNumber=830826, alertNo=1]
> Alert [caseNumber=830826, alertNo=7]
> Alert [caseNumber=830826, alertNo=4]
> Alert [caseNumber=830826, alertNo=1]
>
>
>
>
>
> --
> View this message in context:
> http://drools.46999.n3.nabble.com/Collecting-items-in-a-List-tp4021256.html
> Sent from the Drools: User forum mailing list archive at Nabble.com.
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
More information about the rules-users
mailing list