[rules-users] Handling maps in Drools
Manav
manav7574 at yahoo.com
Thu Aug 16 09:57:34 EDT 2012
Thanks a lot W. That worked like a charm. Just one more twist to the same issue .
Along with the total score for the certifications i also want to take a count of those certifications where the user scores are greater than the required scores for those certifications.
I believe i won't be able to use count and sum in the same function as didn't work for me. However was having issues with figuring out how to do that.
I was thinking along the below lines but it obviously didn't work out
rule "Count test"
when
$rb : Certifications($reqCertificationKeys : requiredCertifications.keySet, $reqCertifications : requiredCertifications)
$user : User( $userCertifications : userCertifications )
Number( $i : intValue ) from accumulate( $key: String( this
memberOf ($userCertifications.keySet()) ) from $reqCertificationKeys,
count( ($userCertifications.get( $key ) > || == $reqCertifications.get($key) ) ? 1 : 0) )
then
System.out.println( "COUNT is " + $i );
end
wonder if there's a better way out.
regards,
Manav
----- Original Message -----
From: Wolfgang Laun <wolfgang.laun at gmail.com>
To: Manav <manav7574 at yahoo.com>; Rules Users List <rules-users at lists.jboss.org>
Cc:
Sent: Thursday, August 16, 2012 2:45 PM
Subject: Re: [rules-users] Handling maps in Drools
This rule works with 5.1.1:
rule "Map test"
when
$rb : Certifications($reqCertificationKeys : requiredCertifications.keySet)
$user : User( $userCertifications : userCertifications )
Number( $score : intValue ) from accumulate( $key: String( this
memberOf ($userCertifications.keySet()) ) from $reqCertificationKeys,
sum( $userCertifications.get( $key ) ) )
then
System.out.println( "score is " + $score );
end
-W
On 16/08/2012, Manav <manav7574 at yahoo.com> wrote:
> Hi,
>
> I am facing an issue with handling maps in LHS of drools. Appreciate your
> help with the same.
>
> I am using Drools version 5.1.
>
>
> I have two maps where one is a reference map that contains certifications
> (key) and scores(value) required and other is map of user's actual
> certifications and scores. Objective is to find the certifications from
> users map based on keys in the reference map . Then for these certifications
> sum the score values and check if they cross the threshold.
>
> While trying to do the first step i am facing an issue . My rule looks like
> this :-
>
> rule "Map test"
> when
> $rb : Certifications($reqCertificationKeys :
> requiredCertifications.keySet)
> $user : User($userCertifications : userCertifications)
> $arg : String() from $reqCertificationKeys
> HashMap ($value : this[$arg] != null) from $userCertifications // Does
> not work
> then
> System.out.println ("Hash Map" + $arg);
> end
>
> However if i change the above line that has issues with below
>
> HashMap ($value : this["Java"] != null) from $userCertifications //
> Works
>
> Is there a way to replace the key with a variable than with a fixed value ?
> Is it possible to iterate the second map with the key values that we get
> from the reference map ?
>
> Regards,
> Manav
>
> _______________________________________________
> 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