[rules-users] how to count distinct nested property?
Jeremy Ary
jeremy.ary at gmail.com
Tue Jul 22 10:39:52 EDT 2014
err, typo there, add() and remove() should be using $myId instead of $id
On Tue, Jul 22, 2014 at 9:38 AM, Jeremy Ary <jeremy.ary at gmail.com> wrote:
> I wonder if something like this might do it?
>
> when
> $set : HashSet ( ) from accumulate ( ObjectA ( $myId : objectC.myId ),
> init ( HashSet uniqueIds = new HashSet<String>(); ),
> action ( uniqueIds.add($id); ),
> reverse ( uniqueIds.remove($id); ),
> result ( uniqueIds ) )
> HashSet ( this == $set, size > 1 )
> then
> // consequence
> end
>
>
> - Jeremy
>
>
>
> On Tue, Jul 22, 2014 at 8:42 AM, richardhands <
> richard.hands at uk.sopragroup.com> wrote:
>
>> Hi,
>>
>> I’m trying to wrap my head around how to use a combination of accumulate
>> from and collect from to get a count of how many unique items there are
>> of a
>> nested child property and run the RHS of a rule if it’s > 1
>>
>> So I have
>>
>> Many of Object A
>>
>> Each one contains
>> An object B
>> An object C
>>
>> Object C contains a nested child property
>>
>> So
>>
>> A
>> +-+-B
>> |
>> +-C – property myId
>>
>> (many of these in the working memory)
>>
>> The rule I’m working with right now is
>>
>> rule "B must only be at 1 myId per day"
>> when
>> $b : B()
>> $c : C()
>> $aList : ArrayList (size > 1)
>> from collect(
>> A(b == $b, c.getDate() == $c.getDate()) )
>> eval ( RulesUtils.countIdsForC ($aList) > 1 )
>> then
>> //fire some rules here
>> end
>>
>> and the RulesUtils method is
>>
>> public static int countIdsForC (List aList)
>> {
>> Set<Integer> myIds = new HashSet<Integer>();
>> for (A a : aList)
>> {
>> myIds.add(a.getC().getMyId());
>> }
>> return myIds.size();
>> }
>>
>>
>> Now I’m well aware that this is sub-optimal, and indeed is firing lots of
>> extra times and is really (Really) slow. I can vizualise that this should
>> easily be possible with some combination of compound accumulate and
>> collect
>> statements, but for the life of me I can’t work out the correct
>> arrangement
>> (This is actually for use in an optaplanner ruleset so it will potentially
>> be working on lots of data, over many iterations).
>>
>> Any suggestions on how to do this the way I know it needs to be,
>> greatfully
>> appreciated
>>
>>
>>
>>
>> --
>> View this message in context:
>> http://drools.46999.n3.nabble.com/how-to-count-distinct-nested-property-tp4030424.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
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20140722/7ce53511/attachment.html
More information about the rules-users
mailing list